diff options
-rw-r--r-- | src/assets/javascripts/services.js | 29 | ||||
-rw-r--r-- | src/assets/javascripts/utils.js | 3 | ||||
-rw-r--r-- | src/instances/data.json | 2 | ||||
-rw-r--r-- | src/pages/background/background.js | 2 | ||||
-rw-r--r-- | src/pages/options/widgets/general.js | 16 |
5 files changed, 43 insertions, 9 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 92d891d7..7b73d9d5 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -784,6 +784,34 @@ function modifyContentSecurityPolicy(details) { } } +function processEnabledInstanceList() { + return new Promise(resolve => { + fetch("/config/config.json") + .then(response => response.text()) + .then(configData => { + const config = JSON.parse(configData) + browser.storage.local.get(["redirects", "options"], r => { + let options = r.options + for (const service in config.services) { + for (const frontend in config.services[service].frontends) { + if (config.services[service].frontends[frontend].instanceList) { + for (const network in config.networks) { + for (const instance of options[frontend][network].enabled) { + let i = redirects[frontend][network].indexOf(instance) + if (i < 0) options[frontend][network].enabled.splice(i, 1) + } + } + } + } + } + browser.storage.local.set({ options }, () => { + resolve() + }) + }) + }) + }) +} + export default { redirect, computeService, @@ -795,4 +823,5 @@ export default { upgradeOptions, processUpdate, modifyContentSecurityPolicy, + processEnabledInstanceList, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 1f09435c..66a439bf 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -46,7 +46,8 @@ function updateInstances() { await initBlackList() const instances = JSON.parse(http.responseText) - servicesHelper.setRedirects(instances) + await servicesHelper.setRedirects(instances) + await servicesHelper.processEnabledInstanceList() console.info("Successfully updated Instances") resolve(true) diff --git a/src/instances/data.json b/src/instances/data.json index 61ffd98b..890ac74a 100644 --- a/src/instances/data.json +++ b/src/instances/data.json @@ -1884,4 +1884,4 @@ "https://diode.zone", "https://peertube.nomagic.uk" ] -} \ No newline at end of file +} diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 35deb8f9..ad79323f 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -38,11 +38,13 @@ browser.runtime.onInstalled.addListener(details => { await generalHelper.initDefaults() await servicesHelper.initDefaults() await servicesHelper.upgradeOptions() + await servicesHelper.processEnabledInstanceList() } }) break default: await servicesHelper.processUpdate() + await servicesHelper.processEnabledInstanceList() } }) }) diff --git a/src/pages/options/widgets/general.js b/src/pages/options/widgets/general.js index 164d9b89..bcc9afed 100644 --- a/src/pages/options/widgets/general.js +++ b/src/pages/options/widgets/general.js @@ -31,11 +31,6 @@ async function getConfig() { function setOption(option, type, event) { browser.storage.local.get("options", r => { let options = r.options - browser.storage.local.set({ options }) - }) - - browser.storage.local.get("options", r => { - let options = r.options if (type == "select") { options[option] = event.target.options[event.target.options.selectedIndex].value } else if (type == "checkbox") { @@ -82,13 +77,20 @@ importSettingsElement.addEventListener("change", () => { await generalHelper.initDefaults() await servicesHelper.initDefaults() await servicesHelper.upgradeOptions() + await servicesHelper.processEnabledInstanceList() location.reload() }) }) }) ) - } else if ("version" in data) browser.storage.local.set({ options: data }, () => location.reload()) - else { + } else if ("version" in data) { + let options = data + delete options.version + browser.storage.local.set({ options: data }, async () => { + await servicesHelper.processEnabledInstanceList() + location.reload() + }) + } else { console.log("incompatible settings") importError() } |