aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/assets/javascripts/services.js134
-rw-r--r--src/pages/background/background.js8
-rw-r--r--src/pages/options_src/General/SettingsButtons.svelte28
-rw-r--r--src/pages/options_src/Services/Services.svelte2
-rw-r--r--src/pages/popup_src/App.svelte2
5 files changed, 76 insertions, 98 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js
index 417f66c3..9b6ef325 100644
--- a/src/assets/javascripts/services.js
+++ b/src/assets/javascripts/services.js
@@ -831,99 +831,86 @@ const defaultInstances = {
ytify: ["https://ytify.netlify.app"],
}
+async function getDefaults() {
+ let config = await utils.getConfig()
+ let options = {}
+ for (const service in config.services) {
+ options[service] = {}
+ for (const defaultOption in config.services[service].options) {
+ options[service][defaultOption] = config.services[service].options[defaultOption]
+ }
+ for (const frontend in config.services[service].frontends) {
+ if (config.services[service].frontends[frontend].instanceList) {
+ options[frontend] = []
+ }
+ }
+ }
+ options.exceptions = {
+ url: [],
+ regex: [],
+ }
+ options.theme = "detect"
+ options.popupServices = ["youtube", "tiktok", "imgur", "reddit", "quora", "translate", "maps"]
+ options.fetchInstances = "github"
+ options.redirectOnlyInIncognito = false
+ options = { ...options, ...defaultInstances }
+ return options
+}
+
function initDefaults() {
return new Promise(resolve => {
browser.storage.local.clear(async () => {
- let config = await utils.getConfig()
- let options = {}
- for (const service in config.services) {
- options[service] = {}
- for (const defaultOption in config.services[service].options) {
- options[service][defaultOption] = config.services[service].options[defaultOption]
- }
- for (const frontend in config.services[service].frontends) {
- if (config.services[service].frontends[frontend].instanceList) {
- options[frontend] = []
- }
- }
- }
- options.exceptions = {
- url: [],
- regex: [],
- }
- options.theme = "detect"
- options.popupServices = ["youtube", "tiktok", "imgur", "reddit", "quora", "translate", "maps"]
- options.fetchInstances = "github"
- options.redirectOnlyInIncognito = false
-
- options = { ...options, ...defaultInstances }
-
+ options = await getDefaults()
browser.storage.local.set({ options }, () => resolve())
})
})
}
-function upgradeOptions() {
- return new Promise(async resolve => {
- let options = await utils.getOptions()
-
- browser.storage.local.clear(() => {
- browser.storage.local.set({ options }, () => {
- resolve()
- })
- })
- })
-}
-
-function processUpdate() {
+function processUpdate(_options) {
return new Promise(async resolve => {
- let frontends = []
const config = await utils.getConfig()
- let options = await utils.getOptions()
- for (const service in config.services) {
- if (!options[service]) options[service] = {}
+ let options = _options ?? await utils.getOptions()
- if (!(options[service].frontend in config.services[service].frontends)) {
- options[service] = config.services[service].options // Reset settings for service
- delete options[options[service].frontend] // Remove deprecated frontend
- }
+ const defaults = await getDefaults()
- for (const defaultOption in config.services[service].options) {
- if (!(defaultOption in options[service])) {
- options[service][defaultOption] = config.services[service].options[defaultOption]
+ // Remove any unknown option or subOption
+ for (const optionName in options) {
+ if (!(optionName in defaults)) delete options[optionName]
+ else if (typeof optionName === 'object' && optionName !== null) {
+ for (const subOptionName in options[optionName]) {
+ if (!(subOptionName in defaults[optionName])) delete options[optionName][subOptionName]
}
}
+ }
+
+ // Remove any unknwon popupService
+ options.popupServices = options.popupServices.filter(service => service in config.services)
+
+ // Add missing options
+ for (const [defaultName, defaultValue] of Object.entries(defaults)) {
+ if (!(defaultName in options)) {
+ options[defaultName] = defaultValue
+ }
+ }
- for (const frontend in config.services[service].frontends) {
- frontends.push(frontend)
- if (!(frontend in options) && config.services[service].frontends[frontend].instanceList) {
- options[frontend] = defaultInstances[frontend] || []
- }
+ for (const [serviceName, serviceValue] of Object.entries(config.services)) {
+ // Reset service options if selected frontend is deprecated
+ if (!(options[serviceName].frontend in serviceValue.frontends)) {
+ options[serviceName] = serviceValue.options
}
- for (const frontend of options.popupServices) {
- if (!Object.keys(config.services).includes(frontend)) {
- const i = options.popupServices.indexOf(frontend)
- if (i > -1) options.popupServices.splice(i, 1)
+ // Add a default service option if it's not present
+ for (const optionName in serviceValue.options) {
+ if (!(optionName in options[serviceName])) {
+ options[serviceName][optionName] = serviceValue.options[optionName]
}
}
}
- const general = ["theme", "popupServices", "fetchInstances", "redirectOnlyInIncognito"]
- const combined = [
- ...Object.keys(config.services),
- ...frontends,
- ...general,
- "exceptions",
- "popupServices",
- "version",
- ]
- for (const key in options) {
- if (combined.indexOf(key) < 0) {
- delete options[key] // Remove any unknown settings in options
- }
- }
- browser.storage.local.set({ options }, () => {
- resolve()
+
+ browser.storage.local.clear(() => {
+ browser.storage.local.set({ options }, () => {
+ resolve(options)
+ })
})
})
}
@@ -973,7 +960,6 @@ export default {
computeService,
reverse,
initDefaults,
- upgradeOptions,
processUpdate,
copyRaw,
switchInstance,
diff --git a/src/pages/background/background.js b/src/pages/background/background.js
index d42e5027..576365bd 100644
--- a/src/pages/background/background.js
+++ b/src/pages/background/background.js
@@ -13,14 +13,8 @@ browser.runtime.onInstalled.addListener(async details => {
if (!(await utils.getOptions())) {
await servicesHelper.initDefaults()
}
- browser.runtime.openOptionsPage()
} else if (details.reason == "update") {
- if (details.previousVersion == "2.5.2") {
- await servicesHelper.upgradeOptions()
- await servicesHelper.processUpdate()
- } else {
- await servicesHelper.processUpdate()
- }
+ await servicesHelper.processUpdate()
}
}
})
diff --git a/src/pages/options_src/General/SettingsButtons.svelte b/src/pages/options_src/General/SettingsButtons.svelte
index 2f574199..29b756d2 100644
--- a/src/pages/options_src/General/SettingsButtons.svelte
+++ b/src/pages/options_src/General/SettingsButtons.svelte
@@ -20,14 +20,12 @@
const reader = new FileReader()
reader.readAsText(importSettingsFiles[0])
reader.onload = async () => {
- const data = JSON.parse(reader.result)
- if ("theme" in data && data.version == browser.runtime.getManifest().version) {
- browser.storage.local.clear(async () => {
- options.set(data)
- })
- } else {
- alert("Incompatible settings")
+ let data = JSON.parse(reader.result)
+ if (data.version != browser.runtime.getManifest().version) {
+ alert("Importing from a previous version. Be careful")
}
+ data = await servicesHelper.processUpdate(data)
+ options.set(data)
}
reader.onerror = error => {
console.log("error", error)
@@ -51,20 +49,20 @@
}
async function importSettingsSync() {
- browser.storage.sync.get({ options }, r => {
- const optionsSync = r.options
- if (optionsSync.version == browser.runtime.getManifest().version) {
- options.set(optionsSync)
- } else {
- alert("Error")
+ browser.storage.sync.get({ options }, async r => {
+ let data = r.options
+ if (data.version != browser.runtime.getManifest().version) {
+ alert("Importing from a previous version. Be careful")
}
+ data = await servicesHelper.processUpdate(data)
+ options.set(data)
})
}
async function resetSettings() {
browser.storage.local.clear(async () => {
- await servicesHelper.initDefaults()
- options.set(await utils.getOptions())
+ const data = await servicesHelper.initDefaults()
+ options.set(data)
})
}
</script>
diff --git a/src/pages/options_src/Services/Services.svelte b/src/pages/options_src/Services/Services.svelte
index 481afb83..6b16e824 100644
--- a/src/pages/options_src/Services/Services.svelte
+++ b/src/pages/options_src/Services/Services.svelte
@@ -72,7 +72,7 @@
<ServiceIcon details={selection} />
{selection.label}
{:else}
- {browser.i18n.getMessage("search_service") || "Search Service"}
+ {browser.i18n.getMessage("searchService") || "Search Service"}
{/if}
</div>
<div style="font-size: 10px;" slot="chevron-icon">🮦</div>
diff --git a/src/pages/popup_src/App.svelte b/src/pages/popup_src/App.svelte
index 3409052d..2bd16169 100644
--- a/src/pages/popup_src/App.svelte
+++ b/src/pages/popup_src/App.svelte
@@ -88,7 +88,7 @@
<style>
:global(html, body) {
- width: 300px;
+ width: 280px;
height: min-content;
min-height: auto;
margin: 0;