From 0eca538ddd4f0d38fd960b341bc7e852f062bc18 Mon Sep 17 00:00:00 2001
From: AlphaX-Projects <77661270+AlphaX-Projects@users.noreply.github.com>
Date: Fri, 5 May 2023 19:23:51 +0200
Subject: [PATCH] reduce api calls on websites
---
.../plugins/core/qdn/websites.src.js | 190 ++++++++++++++++--
1 file changed, 168 insertions(+), 22 deletions(-)
diff --git a/qortal-ui-plugins/plugins/core/qdn/websites.src.js b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
index e412bd92..e7c3a252 100644
--- a/qortal-ui-plugins/plugins/core/qdn/websites.src.js
+++ b/qortal-ui-plugins/plugins/core/qdn/websites.src.js
@@ -338,11 +338,7 @@ class Websites extends LitElement {
}}>
{
- render(html`${this.renderFollowUnfollowButton(data.item)}`, root);
- }}>
-
- {
- render(html`${this.renderBlockUnblockButton(data.item)}`, root);
+ render(html`${this.renderFollowUnfollowButtonTab(data.item)}`, root);
}}>
@@ -375,12 +371,8 @@ class Websites extends LitElement {
render(html`${this.renderPublishedBy(data.item)}`, root)
}}>
- {
- render(html`${this.renderFollowUnfollowButton(data.item)}`, root);
- }}>
-
{
- render(html`${this.renderBlockUnblockButton(data.item)}`, root);
+ render(html`${this.renderBlockUnblockButtonTab(data.item)}`, root);
}}>
@@ -479,7 +471,7 @@ class Websites extends LitElement {
setTimeout(getRelayMode, 1)
setTimeout(this.getFollowedNamesResource, 1)
setTimeout(this.getBlockedNamesResource, 1)
- setInterval(this.getArbitraryResources, 600000)
+ setInterval(this.getArbitraryResources, 900000)
configLoaded = true
}
this.config = JSON.parse(c)
@@ -522,9 +514,25 @@ class Websites extends LitElement {
const tabBrowseContent = this.shadowRoot.getElementById('tab-browse-content')
const tabFollowedContent = this.shadowRoot.getElementById('tab-followed-content')
const tabBlockedContent = this.shadowRoot.getElementById('tab-blocked-content')
- tabBrowseContent.style.display = (tab === 'browse') ? 'block' : 'none'
- tabFollowedContent.style.display = (tab === 'followed') ? 'block' : 'none'
- tabBlockedContent.style.display = (tab === 'blocked') ? 'block' : 'none'
+ if (tab === 'browse') {
+ this.refreshWebsites()
+ tabBrowseContent.style.display = 'block'
+ tabFollowedContent.style.display = 'none'
+ tabBlockedContent.style.display = 'none'
+ } else if (tab === 'followed') {
+ this.getFollowedNamesRefresh()
+ this.getFollowedNamesResource()
+ tabBrowseContent.style.display = 'none'
+ tabFollowedContent.style.display = 'block'
+ tabBlockedContent.style.display = 'none'
+ } else if (tab === 'blocked') {
+ this.getBlockedNamesRefresh()
+ this.getBlockedNamesResource()
+ tabBrowseContent.style.display = 'none'
+ tabFollowedContent.style.display = 'none'
+ tabBlockedContent.style.display = 'block'
+ } else {
+ }
}
searchListener(e) {
@@ -751,6 +759,35 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully followed - add to local list
+ // Remove it first by filtering the list - doing it this way ensures the UI updates
+ // immediately, as apposed to only adding if it doesn't already exist
+ this.followedNames = this.followedNames.filter(item => item != name)
+ this.followedNames.push(name)
+ } else {
+ let err3string = get("websitespage.schange22")
+ parentEpml.request('showSnackBar', `${err3string}`)
+ }
+ return ret
+ }
+
+ async followNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/followedNames?apiKey=${this.getApiKey()}`,
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully followed - add to local list
// Remove it first by filtering the list - doing it this way ensures the UI updates
@@ -759,8 +796,6 @@ class Websites extends LitElement {
this.followedNames.push(name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err3string = get("websitespage.schange22")
parentEpml.request('showSnackBar', `${err3string}`)
@@ -784,13 +819,37 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully unfollowed - remove from local list
+ this.followedNames = this.followedNames.filter(item => item != name)
+ } else {
+ let err4string = get("websitespage.schange23")
+ parentEpml.request('showSnackBar', `${err4string}`)
+ }
+ return ret
+ }
+
+ async unfollowNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/followedNames?apiKey=${this.getApiKey()}`,
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully unfollowed - remove from local list
this.followedNames = this.followedNames.filter(item => item != name)
this.getFollowedNamesRefresh()
this.getFollowedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err4string = get("websitespage.schange23")
parentEpml.request('showSnackBar', `${err4string}`)
@@ -814,6 +873,35 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully blocked - add to local list
+ // Remove it first by filtering the list - doing it this way ensures the UI updates
+ // immediately, as apposed to only adding if it doesn't already exist
+ this.blockedNames = this.blockedNames.filter(item => item != name)
+ this.blockedNames.push(name)
+ } else {
+ let err5string = get("websitespage.schange24")
+ parentEpml.request('showSnackBar', `${err5string}`)
+ }
+ return ret
+ }
+
+ async blockNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/blockedNames?apiKey=${this.getApiKey()}`,
+ method: 'POST',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully blocked - add to local list
// Remove it first by filtering the list - doing it this way ensures the UI updates
@@ -822,8 +910,6 @@ class Websites extends LitElement {
this.blockedNames.push(name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err5string = get("websitespage.schange24")
parentEpml.request('showSnackBar', `${err5string}`)
@@ -847,13 +933,37 @@ class Websites extends LitElement {
body: `${namesJsonString}`
})
+ if (ret === true) {
+ // Successfully unblocked - remove from local list
+ this.blockedNames = this.blockedNames.filter(item => item != name)
+ } else {
+ let err6string = get("websitespage.schange25")
+ parentEpml.request('showSnackBar', `${err6string}`)
+ }
+ return ret
+ }
+
+ async unblockNameTab(websiteObj) {
+ let name = websiteObj.name
+ let items = [
+ name
+ ]
+ let namesJsonString = JSON.stringify({ "items": items })
+
+ let ret = await parentEpml.request('apiCall', {
+ url: `/lists/blockedNames?apiKey=${this.getApiKey()}`,
+ method: 'DELETE',
+ headers: {
+ 'Content-Type': 'application/json'
+ },
+ body: `${namesJsonString}`
+ })
+
if (ret === true) {
// Successfully unblocked - remove from local list
this.blockedNames = this.blockedNames.filter(item => item != name)
this.getBlockedNamesRefresh()
this.getBlockedNamesResource()
- this.refreshWebsites()
- this.updateComplete.then(() => this.requestUpdate())
} else {
let err6string = get("websitespage.schange25")
parentEpml.request('showSnackBar', `${err6string}`)
@@ -930,6 +1040,24 @@ class Websites extends LitElement {
}
}
+ renderFollowUnfollowButtonTab(websiteObj) {
+ let name = websiteObj.name
+
+ // Only show the follow/unfollow button if we have permission to modify the list on this node
+ if (this.followedNames == null || !Array.isArray(this.followedNames)) {
+ return html``
+ }
+
+ if (this.followedNames.indexOf(name) === -1) {
+ // render follow button
+ return html` this.followNameTab(websiteObj)}>add_to_queue ${translate("websitespage.schange29")}`
+ }
+ else {
+ // render unfollow button
+ return html` this.unfollowNameTab(websiteObj)}>remove_from_queue ${translate("websitespage.schange30")}`
+ }
+ }
+
renderBlockUnblockButton(websiteObj) {
let name = websiteObj.name
@@ -948,6 +1076,24 @@ class Websites extends LitElement {
}
}
+ renderBlockUnblockButtonTab(websiteObj) {
+ let name = websiteObj.name
+
+ // Only show the block/unblock button if we have permission to modify the list on this node
+ if (this.blockedNames == null || !Array.isArray(this.blockedNames)) {
+ return html``
+ }
+
+ if (this.blockedNames.indexOf(name) === -1) {
+ // render block button
+ return html` this.blockNameTab(websiteObj)}>block ${translate("websitespage.schange31")}`
+ }
+ else {
+ // render unblock button
+ return html` this.unblockNameTab(websiteObj)}>radio_button_unchecked ${translate("websitespage.schange32")}`
+ }
+ }
+
bytesToSize(bytes) {
var sizes = ['bytes', 'KB', 'MB', 'GB', 'TB']
if (bytes == 0) return '0 bytes'