diff options
Diffstat (limited to 'src/assets')
-rw-r--r-- | src/assets/javascripts/services.js | 185 | ||||
-rw-r--r-- | src/assets/javascripts/utils.js | 4 |
2 files changed, 65 insertions, 124 deletions
diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 9e3570d0..4b8f9188 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -2,14 +2,12 @@ window.browser = window.browser || window.chrome import utils from "./utils.js" -let config, options, targets +let config, options function init() { return new Promise(async resolve => { - browser.storage.local.get(["options", "targets", "embedTabs"], r => { + browser.storage.local.get(["options"], r => { options = r.options - targets = r.targets - embedTabs = r.embedTabs fetch("/config.json") .then(response => response.text()) .then(configData => { @@ -38,25 +36,18 @@ function all(service, frontend, options, config) { } function regexArray(service, url, config, frontend) { - if (config.services[service].targets == "datajson") { - for (const instance of targets[service]) { - if (instance.startsWith(utils.protocolHost(url))) return true - } - } else { - let targetList = config.services[service].targets - if (frontend && config.services[service].frontends[frontend].excludeTargets) - for (const i in config.services[service].frontends[frontend].excludeTargets) { - targetList = targetList.splice(i, 1) - } - for (const targetString in targetList) { - const target = new RegExp(targetList[targetString]) - if (target.test(url.href)) return true + let targetList = config.services[service].targets + if (frontend && config.services[service].frontends[frontend].excludeTargets) + for (const i in config.services[service].frontends[frontend].excludeTargets) { + targetList = targetList.splice(i, 1) } + for (const targetString in targetList) { + const target = new RegExp(targetList[targetString]) + if (target.test(url.href)) return true } return false } -let embedTabs = {} function redirect(url, type, initiator, forceRedirection, tabId) { if (type != "main_frame" && type != "sub_frame" && type != "image") return let randomInstance @@ -79,17 +70,7 @@ function redirect(url, type, initiator, forceRedirection, tabId) { } if (instanceList.length === 0) return - if ((type == "sub_frame" || type == "image") && embedTabs[tabId] && embedTabs[tabId][frontend] !== undefined) { - randomInstance = embedTabs[tabId][frontend] - } else { - randomInstance = utils.getRandomInstance(instanceList) - } - - if ((type == "sub_frame" || type == "image") && embedTabs[tabId] === undefined) { - embedTabs[tabId] = {} - embedTabs[tabId][frontend] = randomInstance - browser.storage.local.set(embedTabs) - } + randomInstance = utils.getRandomInstance(instanceList) break } @@ -491,7 +472,7 @@ function reverse(url, urlString) { await init() let protocolHost if (!urlString) protocolHost = utils.protocolHost(url) - else protocolHost = url.match(/https?:\/{2}(?:[^\s\/]+\.)+[a-zA-Z0-9]+/)[0] + else protocolHost = url.match(/^https?:\/{2}/)[0] for (const service in config.services) { if (!all(service, null, options, config).includes(protocolHost)) continue @@ -530,9 +511,7 @@ function initDefaults() { .then(configData => { browser.storage.local.get(["options"], r => { let options = r.options - let targets = {} let config = JSON.parse(configData) - const localstorage = {} for (const service in config.services) { options[service] = {} for (const defaultOption in config.services[service].options) { @@ -545,7 +524,7 @@ function initDefaults() { } } browser.storage.local.set( - { options, targets, localstorage, embedTabs: {} }, + { options }, () => resolve() ) }) @@ -553,62 +532,51 @@ function initDefaults() { }) } +function backupOptions() { + return new Promise(resolve => { + browser.storage.local.get( + "options", r => { + const oldOptions = r.options + browser.storage.local.clear(() => { + browser.storage.local.set({ oldOptions }, + () => resolve() + ) + }) + + }) + }) +} + function upgradeOptions() { return new Promise(resolve => { fetch("/config.json") .then(response => response.text()) .then(configData => { - browser.storage.local.get(null, r => { + browser.storage.local.get(["oldOptions", "options"], r => { + const oldOptions = r.oldOptions let options = r.options const config = JSON.parse(configData) - options.exceptions = r.exceptions - if (r.theme != "DEFAULT") options.theme = r.theme - options.popupServices = r.popupFrontends - let tmp = options.popupServices.indexOf("tikTok") - if (tmp > -1) { - options.popupServices.splice(tmp, 1) - options.popupServices.push("tiktok") - } - tmp = options.popupServices.indexOf("sendTarget") - if (tmp > -1) { - options.popupServices.splice(tmp, 1) - options.popupServices.push("sendFiles") - } - switch (r.onlyEmbeddedVideo) { - case "onlyNotEmbedded": - options.youtube.redirectType = "main_frame" - case "onlyEmbedded": - options.youtube.redirectType = "sub_frame" - case "both": - options.youtube.redirectType = "both" - } + + options.exceptions = oldOptions.exceptions + options.theme = oldOptions.theme + options.popupServices = oldOptions.popupServices + for (const service in config.services) { - let oldService - switch (service) { - case "tiktok": - oldService = "tikTok" - break - case "sendFiles": - oldService = "sendTarget" - break - default: - oldService = service - } - options[service].enabled = !r["disable" + utils.camelCase(oldService)] - if (r[oldService + "Frontend"]) { - if (r[oldService + "Frontend"] == "yatte") options[service].frontend = "yattee" - else options[service].frontend = r[oldService + "Frontend"] - } - if (r[oldService + "RedirectType"]) options[service].redirectType = r[oldService + "RedirectType"] - for (const frontend in config.services[service].frontends) { - for (const network in config.networks) { - let protocol - if (network == "clearnet") protocol = "normal" - else protocol = network - } + options[service] = oldOptions[service] + options[service].remove("embedFrontend") + + for (const frontend in network.services[service].frontends) { + options[frontend] = [ + ...oldOptions[frontend].clearnet.enabled, + ...oldOptions[frontend].clearnet.custom + ] } } - browser.storage.local.set({ options }, () => resolve()) + browser.storage.local.set({ options }, () => { + browser.storage.local.remove("oldOptions", () => { + resolve() + }) + }) }) }) }) @@ -616,51 +584,23 @@ function upgradeOptions() { function processUpdate() { return new Promise(resolve => { - fetch("/instances/data.json") + fetch("/config.json") .then(response => response.text()) - .then(data => { - fetch("/config.json") - .then(response => response.text()) - .then(configData => { - browser.storage.local.get(["options", "targets"], async r => { - let redirects = JSON.parse(data) - let options = r.options - let targets = r.targets - let config = JSON.parse(configData) - for (const service in config.services) { - if (!options[service]) options[service] = {} - if (config.services[service].targets == "datajson") { - targets[service] = redirects[service] - delete redirects[service] - } - for (const defaultOption in config.services[service].options) { - if (options[service][defaultOption] === undefined) { - options[service][defaultOption] = config.services[service].options[defaultOption] - } - } - for (const frontend in config.services[service].frontends) { - if (config.services[service].frontends[frontend].instanceList) { - if (!options[frontend]) options[frontend] = {} - for (const network in config.networks) { - if (!options[frontend]) { - options[frontend] = [] - if (network == "clearnet") { - for (const blacklist of await utils.getBlacklist()) { - for (const instance of blacklist) { - let i = options[frontend].clearnet.enabled.indexOf(instance) - if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) - } - } - } - } - } - } - } + .then(configJson => { + let config = JSON.parse(configJson) + browser.storage.local.get(["options"], async r => { + let options = r.options + for (const service in config.services) { + if (!options[service]) options[service] = {} + for (const defaultOption in config.services[service].options) { + if (options[service][defaultOption] === undefined) { + options[service][defaultOption] = config.services[service].options[defaultOption] } - browser.storage.local.set({ redirects, options, targets }) - resolve() - }) - }) + } + } + browser.storage.local.set({ options }) + resolve() + }) }) }) } @@ -710,6 +650,7 @@ export default { reverse, initDefaults, upgradeOptions, + backupOptions, processUpdate, modifyContentSecurityPolicy, } diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index 86b9b402..3a7bd839 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -73,7 +73,7 @@ function switchInstance(test) { function getBlacklist() { return new Promise(resolve => { const http = new XMLHttpRequest() - http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/blacklist.json", true) + http.open("GET", "https://raw.githubusercontent.com/libredirect/instances/main/blacklist.json", true) http.onreadystatechange = () => { if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) { resolve(JSON.parse(http.responseText)) @@ -87,7 +87,7 @@ function getBlacklist() { function getList() { return new Promise(resolve => { const http = new XMLHttpRequest() - http.open("GET", "https://codeberg.org/LibRedirect/libredirect/raw/branch/master/src/instances/data.json", true) + http.open("GET", "https://raw.githubusercontent.com/libredirect/instances/main/data.json", true) http.onreadystatechange = () => { if (http.status === 200 && http.readyState == XMLHttpRequest.DONE) { resolve(JSON.parse(http.responseText)) |