about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--src/assets/javascripts/services.js29
-rw-r--r--src/assets/javascripts/utils.js3
-rw-r--r--src/instances/data.json2
-rw-r--r--src/pages/background/background.js2
-rw-r--r--src/pages/options/widgets/general.js16
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()
 		}