From 5d1e58b73319e30634f23e44a61d2db1f5fb0ed8 Mon Sep 17 00:00:00 2001 From: Mirco Wittrien Date: Fri, 14 Dec 2018 11:43:54 +0100 Subject: [PATCH] Plugin/ThemeRepo refetches after 20mins if they got stuck --- Plugins/PluginRepo/PluginRepo.plugin.js | 35 ++++++++++++++++------- Plugins/ThemeRepo/ThemeRepo.plugin.js | 37 ++++++++++++++++++------- 2 files changed, 52 insertions(+), 20 deletions(-) diff --git a/Plugins/PluginRepo/PluginRepo.plugin.js b/Plugins/PluginRepo/PluginRepo.plugin.js index dd4c777706..c1f0a21961 100644 --- a/Plugins/PluginRepo/PluginRepo.plugin.js +++ b/Plugins/PluginRepo/PluginRepo.plugin.js @@ -17,7 +17,7 @@ class PluginRepo { } }; - this.loading = false; + this.loading = {is:false, timeout:null, amount:0}; this.grabbedPlugins = []; this.foundPlugins = []; @@ -239,7 +239,7 @@ class PluginRepo { getDescription () {return "Allows you to look at all plugins from the plugin repo and download them on the fly. Repo button is in the plugins settings.";} - getVersion () {return "1.6.2";} + getVersion () {return "1.6.3";} getAuthor () {return "DevilBro";} @@ -266,7 +266,10 @@ class PluginRepo { .on("keyup", "#input-pluginurl", (e) => {if (e.which == 13) this.addPluginToOwnList(settingspanel);}) .on("click", ".remove-plugin", (e) => {this.removePluginFromOwnList(e);}) .on("click", ".remove-all", () => {this.removeAllFromOwnList(settingspanel);}) - .on("click", ".refresh-button", () => {this.loadPlugins();}); + .on("click", ".refresh-button", () => { + this.loading = {is:false, timeout:null, amount:0}; + this.loadPlugins(); + }); return settingspanel; } @@ -356,6 +359,7 @@ class PluginRepo { stop () { if (typeof BDFDB === "object") { clearInterval(this.updateInterval); + clearTimeout(this.loading.timeout); $("webview[webview-pluginrepo], .pluginrepo-modal, .bd-pluginrepobutton, .pluginrepo-loadingicon").remove(); $(BDFDB.dotCN.app + " > .repo-loadingwrapper:empty").remove(); @@ -381,7 +385,7 @@ class PluginRepo { if (innerEntry.textContent == "Themes") { $(this.settingsContextEntryMarkup) .on("click", () => { - if (!this.loading) $(context).hide(); + if (!this.loading.is) $(context).hide(); this.openPluginRepoModal(); }) .insertAfter(innerEntry); @@ -462,7 +466,7 @@ class PluginRepo { } openPluginRepoModal (showOnlyOutdated = false) { - if (this.loading) { + if (this.loading.is) { BDFDB.showToast(`Plugins are still being fetched. Try again in some seconds.`, {type:"danger"}); return; } @@ -681,7 +685,13 @@ class PluginRepo { this.loadedPlugins = {}; this.grabbedPlugins = result.split("\n"); this.foundPlugins = this.grabbedPlugins.concat(BDFDB.loadData("ownlist", this, "ownlist") || []); - this.loading = true; + this.loading = {is:true, timeout:setTimeout(() => { + clearTimeout(this.loading.timeout); + if (this.started) { + if (this.loading.is && this.loading.amount < 4) setTimeout(() => {this.loadPlugins();},10000); + this.loading = {is: false, timeout:null, amount:this.loading.amount}; + } + },1200000), amount:this.loading.amount+1}; var loadingiconwrapper = document.querySelector(BDFDB.dotCN.app + "> .repo-loadingwrapper"); if (!loadingiconwrapper) { loadingiconwrapper = document.createElement("div"); @@ -695,16 +705,18 @@ class PluginRepo { createWebview().then(() => { getPluginInfo(() => { if (!this.started) { + clearTimeout(this.loading.timeout); if (typeof webview != "undefined") webview.remove(); return; } var finishCounter = 0, finishInterval = setInterval(() => { - if ((webviewqueue.length == 0 && !webviewrunning) || finishCounter > 300) { + if ((webviewqueue.length == 0 && !webviewrunning) || finishCounter > 300 || !this.loading.is) { clearInterval(finishInterval); if (typeof webview != "undefined") webview.remove(); $(".pluginrepo-loadingicon").remove(); if (!loadingiconwrapper.firstChild) loadingiconwrapper.remove(); - this.loading = false; + clearTimeout(this.loading.timeout); + this.loading = {is:false, timeout:null, amount:this.loading.amount}; console.log("PluginRepo: Finished fetching Plugins."); if (document.querySelector(".bd-pluginrepobutton")) BDFDB.showToast(`Finished fetching Plugins.`, {type:"success"}); if (outdated > 0) { @@ -736,7 +748,7 @@ class PluginRepo { }); getPluginInfo = (callback) => { - if (i >= this.foundPlugins.length || !this.started) { + if (i >= this.foundPlugins.length || !this.started || !this.loading.is) { callback(); return; } @@ -865,7 +877,10 @@ class PluginRepo { checkForNewPlugins () { let request = require("request"); request("https://mwittrien.github.io/BetterDiscordAddons/Plugins/PluginRepo/res/PluginList.txt", (error, response, result) => { - if (response && !BDFDB.equals(result.split("\n"), this.grabbedPlugins)) this.loadPlugins(); + if (response && !BDFDB.equals(result.split("\n"), this.grabbedPlugins)) { + this.loading = {is:false, timeout:null, amount:0}; + this.loadPlugins(); + } }); } diff --git a/Plugins/ThemeRepo/ThemeRepo.plugin.js b/Plugins/ThemeRepo/ThemeRepo.plugin.js index 74b7d65aef..3ca3412a2a 100644 --- a/Plugins/ThemeRepo/ThemeRepo.plugin.js +++ b/Plugins/ThemeRepo/ThemeRepo.plugin.js @@ -17,7 +17,7 @@ class ThemeRepo { } }; - this.loading = false; + this.loading = {is:false, timeout:null, amount:0}; this.grabbedThemes = []; this.foundThemes = []; @@ -291,7 +291,7 @@ class ThemeRepo { getDescription () {return "Allows you to preview all themes from the theme repo and download them on the fly. Repo button is in the theme settings.";} - getVersion () {return "1.5.8";} + getVersion () {return "1.5.9";} getAuthor () {return "DevilBro";} @@ -318,7 +318,10 @@ class ThemeRepo { .on("keyup", "#input-themeurl", (e) => {if (e.which == 13) this.addThemeToOwnList(settingspanel);}) .on("click", ".remove-theme", (e) => {this.removeThemeFromOwnList(e);}) .on("click", ".remove-all", () => {this.removeAllFromOwnList(settingspanel);}) - .on("click", ".refresh-button", () => {this.loadThemes();}); + .on("click", ".refresh-button", () => { + this.loading = {is:false, timeout:null, amount:0}; + this.loadThemes(); + }); return settingspanel; } @@ -411,6 +414,7 @@ class ThemeRepo { stop () { if (typeof BDFDB === "object") { clearInterval(this.updateInterval); + clearTimeout(this.loading.timeout); $(".discordPreview, .themerepo-modal, .bd-themerepobutton, .themerepo-loadingicon").remove(); $(BDFDB.dotCN.app + " > .repo-loadingwrapper:empty").remove(); @@ -435,7 +439,7 @@ class ThemeRepo { var innerEntries = node.querySelectorAll(BDFDB.dotCN.contextmenuitem); $(this.settingsContextEntryMarkup) .on("click", () => { - if (!this.loading) $(context).hide(); + if (!this.loading.is) $(context).hide(); this.openThemeRepoModal(); }) .insertAfter(innerEntries[innerEntries.length-1]); @@ -513,7 +517,7 @@ class ThemeRepo { } openThemeRepoModal (showOnlyOutdated = false) { - if (this.loading) { + if (this.loading.is) { BDFDB.showToast(`Themes are still being fetched. Try again in some seconds.`, {type:"danger"}); return; } @@ -800,7 +804,13 @@ class ThemeRepo { this.loadedThemes = {}; this.grabbedThemes = result.split("\n"); this.foundThemes = this.grabbedThemes.concat(BDFDB.loadData("ownlist", this, "ownlist") || []); - this.loading = true; + this.loading = {is:true, timeout:setTimeout(() => { + clearTimeout(this.loading.timeout); + if (this.started) { + if (this.loading.is && this.loading.amount < 4) setTimeout(() => {this.loadThemes();},10000); + this.loading = {is: false, timeout:null, amount:this.loading.amount}; + } + },1200000), amount:this.loading.amount+1}; var loadingiconwrapper = document.querySelector(BDFDB.dotCN.app + "> .repo-loadingwrapper"); if (!loadingiconwrapper) { loadingiconwrapper = document.createElement("div"); @@ -812,10 +822,14 @@ class ThemeRepo { .appendTo(loadingiconwrapper); getThemeInfo(() => { - if (!this.started) return; - this.loading = false; + if (!this.started) { + clearTimeout(this.loading.timeout); + return; + } $(".themerepo-loadingicon").remove(); if (!loadingiconwrapper.firstChild) loadingiconwrapper.remove(); + clearTimeout(this.loading.timeout); + this.loading = {is:false, timeout:null, amount:this.loading.amount}; console.log("ThemeRepo: Finished fetching Themes."); if (document.querySelector(".bd-themerepobutton")) BDFDB.showToast(`Finished fetching Themes.`, {type:"success"}); if (outdated > 0) { @@ -843,7 +857,7 @@ class ThemeRepo { }); getThemeInfo = (callback) => { - if (i >= this.foundThemes.length || !this.started) { + if (i >= this.foundThemes.length || !this.started || !this.loading.is) { callback(); return; } @@ -885,7 +899,10 @@ class ThemeRepo { checkForNewThemes () { let request = require("request"); request("https://mwittrien.github.io/BetterDiscordAddons/Plugins/ThemeRepo/res/ThemeList.txt", (error, response, result) => { - if (response && !BDFDB.equals(result.split("\n"), this.grabbedThemes)) this.loadThemes(); + if (response && !BDFDB.equals(result.split("\n"), this.grabbedThemes)) { + this.loading = {is:false, timeout:null, amount:0}; + this.loadThemes(); + } }); }