diff options
| author | Hygna <hygna@proton.me> | 2022-10-01 11:17:32 +0100 |
|---|---|---|
| committer | Hygna <hygna@proton.me> | 2022-10-01 11:17:32 +0100 |
| commit | e21ecb4e1d640add426865d5719ba8cd63eab977 (patch) | |
| tree | d1e24c6b465dac81c50d10bba9bca755f8d3b095 | |
| parent | Squashed a few bugs (diff) | |
| download | libredirect-e21ecb4e1d640add426865d5719ba8cd63eab977.zip | |
Unify Localstorage
| -rw-r--r-- | src/assets/images/uploadFiles-icon.svg | 3 | ||||
| -rw-r--r-- | src/assets/javascripts/get-localstorage.js | 15 | ||||
| -rw-r--r-- | src/assets/javascripts/init.js | 60 | ||||
| -rw-r--r-- | src/assets/javascripts/services.js | 76 | ||||
| -rw-r--r-- | src/assets/javascripts/set-localstorage.js | 13 | ||||
| -rw-r--r-- | src/assets/javascripts/utils.js | 14 | ||||
| -rw-r--r-- | src/pages/background/background.js | 3 | ||||
| -rw-r--r-- | src/pages/options/index.html | 8 | ||||
| -rw-r--r-- | src/pages/options/widgets/about.ejs | 8 | ||||
| -rw-r--r-- | src/pages/options/widgets/services.js | 2 |
10 files changed, 119 insertions, 83 deletions
diff --git a/src/assets/images/uploadFiles-icon.svg b/src/assets/images/uploadFiles-icon.svg new file mode 100644 index 00000000..5557664e --- /dev/null +++ b/src/assets/images/uploadFiles-icon.svg @@ -0,0 +1,3 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor"> + <path d="M19.35 10.04C18.67 6.59 15.64 4 12 4 9.11 4 6.6 5.64 5.35 8.04 2.34 8.36 0 10.91 0 14c0 3.31 2.69 6 6 6h13c2.76 0 5-2.24 5-5 0-2.64-2.05-4.78-4.65-4.96zM14 13v4h-4v-4H7l5-5 5 5h-3z"></path> +</svg> diff --git a/src/assets/javascripts/get-localstorage.js b/src/assets/javascripts/get-localstorage.js new file mode 100644 index 00000000..66740408 --- /dev/null +++ b/src/assets/javascripts/get-localstorage.js @@ -0,0 +1,15 @@ +window.browser = window.browser || window.chrome + +browser.storage.local.get(["localstorage", "tmp"], r => { + let localstorageJson = r.localstorage + const frontend = r.tmp[0] + const items = r.tmp[1] + localstorageJson[frontend] = {} + + for (const item of items) { + let tmp = localStorage.getItem(item) + if (tmp) localstorageJson[frontend][item] = tmp + } + + browser.storage.local.set({ localstorage: localstorageJson }) +}) diff --git a/src/assets/javascripts/init.js b/src/assets/javascripts/init.js new file mode 100644 index 00000000..c6758530 --- /dev/null +++ b/src/assets/javascripts/init.js @@ -0,0 +1,60 @@ +async function getConfig() { + return new Promise(resolve => { + fetch("/config/config.json") + .then(response => response.text()) + .then(data => { + config = JSON.parse(data) + resolve() + }) + }) +} + +let config +await getConfig() + +async function initDefaults() { + return new Promise(async resolve => { + fetch("/instances/data.json") + .then(response => response.text()) + .then(async data => { + browser.storage.local.get(["options", "blacklists"], async r => { + let redirects = JSON.parse(data) + let options = r.options + let targets = {} + const localstorage = {} + const latency = {} + for (const service in config.services) { + options[service] = {} + if (config.services[service].targets == "datajson") { + targets[service] = redirects[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] = {} + for (const network in config.networks) { + options[frontend][network] = {} + options[frontend][network].enabled = JSON.parse(data)[frontend][network] + options[frontend][network].custom = [] + } + for (const blacklist in r.blacklists) { + for (const instance of r.blacklists[blacklist]) { + let i = options[frontend].clearnet.enabled.indexOf(instance) + if (i > -1) options[frontend].clearnet.enabled.splice(i, 1) + } + } + } + } + } + browser.storage.local.set({ redirects, options, targets, latency, localstorage }) + resolve() + }) + }) + }) +} + +export default { + initDefaults, +} diff --git a/src/assets/javascripts/services.js b/src/assets/javascripts/services.js index 404962ee..718b3f5e 100644 --- a/src/assets/javascripts/services.js +++ b/src/assets/javascripts/services.js @@ -2,7 +2,7 @@ window.browser = window.browser || window.chrome import utils from "./utils.js"
-let config, redirects, options, targets, blacklists
+let config, redirects, options, blacklists
async function getConfig() {
return new Promise(resolve => {
@@ -17,12 +17,10 @@ async function getConfig() { function init() {
return new Promise(async resolve => {
- // await getConfig()
- browser.storage.local.get(["options", "targets", "redirects", "blacklists"], r => {
+ browser.storage.local.get(["options", "redirects", "blacklists"], r => {
if (r.options) {
blacklists = r.blacklists
redirects = r.redirects
- targets = r.targets
options = r.options
}
resolve()
@@ -37,7 +35,6 @@ function fetchFrontendInstanceList(service, frontend) { let tmp = []
if (config.services[service].frontends[frontend].instanceList) {
for (const network in config.networks) {
- if (!redirects[frontend]) console.log(frontend)
tmp.push(...redirects[frontend][network], ...options[frontend][network].custom)
}
} else if (config.services[service].frontends[frontend].singleInstance) tmp = config.services[service].frontends[frontend].singleInstance
@@ -45,8 +42,6 @@ function fetchFrontendInstanceList(service, frontend) { }
function all(service, frontend) {
- // init()
- // getConfig()
let instances = []
if (!frontend) {
for (const frontend in config.services[service].frontends) {
@@ -90,10 +85,9 @@ function redirect(url, type, initiator) { if (!regexArray(service, url)) continue
if (Object.keys(config.services[service].frontends).length > 1) {
- frontend = options[service].frontend
- } else {
- frontend = Object.keys(config.services[service].frontends)[0]
- }
+ if (type == "sub_frame") frontend = options[service].embedFrontend
+ else frontend = options[service].frontend
+ } else frontend = Object.keys(config.services[service].frontends)[0]
if (config.services[service].frontends[frontend].instanceList) {
let instanceList = [...options[frontend][network].enabled, ...options[frontend][network].custom]
@@ -103,7 +97,7 @@ function redirect(url, type, initiator) { } else if (config.services[service].frontends[frontend].singleInstance) randomInstance = config.services[service].frontends[frontend].singleInstance
break
}
- if (frontend == null) return
+ if (!frontend) return
// Here is a (temperory) space for defining constants required in 2 or more switch cases.
// When possible, try have the two switch cases share all their code as done with searx and searxng.
@@ -391,49 +385,6 @@ function redirect(url, type, initiator) { }
}
-async function initDefaults() {
- return new Promise(async resolve => {
- fetch("/instances/data.json")
- .then(response => response.text())
- .then(async data => {
- browser.storage.local.get(["options", "blacklists"], async r => {
- let redirects = JSON.parse(data)
- let options = r.options
- let targets = {}
- const localstorage = {}
- const latency = {}
- for (const service in config.services) {
- options[service] = {}
- if (config.services[service].targets == "datajson") {
- targets[service] = redirects[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] = {}
- for (const network in config.networks) {
- options[frontend][network] = {}
- options[frontend][network].enabled = JSON.parse(data)[frontend][network]
- options[frontend][network].custom = []
- }
- for (const blacklist in r.blacklists) {
- for (const instance of r.blacklists[blacklist]) {
- let i = options[frontend].clearnet.enabled.indexOf(instance)
- if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
- }
- }
- }
- }
- }
- browser.storage.local.set({ redirects, options, targets, latency, localstorage })
- resolve()
- })
- })
- })
-}
-
function computeService(url, returnFrontend) {
for (const service in config.services) {
if (regexArray(service, url)) {
@@ -454,8 +405,6 @@ function computeService(url, returnFrontend) { function switchInstance(url) {
return new Promise(async resolve => {
- // await init()
- // await getConfig()
const protocolHost = utils.protocolHost(url)
for (const service in config.services) {
if (!options[service].enabled) continue
@@ -487,8 +436,6 @@ function switchInstance(url) { function reverse(url) {
return new Promise(async resolve => {
- // await init()
- // await getConfig()
let protocolHost = utils.protocolHost(url)
let currentService
for (const service in config.services) {
@@ -517,8 +464,6 @@ function reverse(url) { function unifyPreferences(url, tabId) {
return new Promise(async resolve => {
- // await init()
- // await getConfig()
const protocolHost = utils.protocolHost(url)
let currentFrontend, currentService
serviceloop: for (const service in config.services) {
@@ -540,18 +485,14 @@ function unifyPreferences(url, tabId) { }
}
if ("localstorage" in frontend.preferences) {
+ browser.storage.local.set({ tmp: [currentFrontend, frontend.preferences.localstorage] })
browser.tabs.executeScript(tabId, {
- code: "const frontend = " + frontend,
- code: "const items = " + config.services[currentService].frontends[currentFrontend].preferences.localStorage,
- //file: "/assets/javascripts/get-localstorage.js",
+ file: "/assets/javascripts/get-localstorage.js",
runAt: "document_start",
})
-
for (const instance of instancesList)
browser.tabs.create({ url: instance }, tab =>
browser.tabs.executeScript(tab.id, {
- code: "const frontend = " + frontend,
- code: "const items = " + config.services[currentService].frontends[currentFrontend].preferences.localStorage,
file: "/assets/javascripts/set-localstorage.js",
runAt: "document_start",
})
@@ -594,7 +535,6 @@ function setRedirects(redirects) { export default {
redirect,
- initDefaults,
computeService,
switchInstance,
reverse,
diff --git a/src/assets/javascripts/set-localstorage.js b/src/assets/javascripts/set-localstorage.js new file mode 100644 index 00000000..8dbfcad7 --- /dev/null +++ b/src/assets/javascripts/set-localstorage.js @@ -0,0 +1,13 @@ +window.browser = window.browser || window.chrome + +browser.storage.local.get(["localstorage", "tmp"], r => { + const localstorageJson = r.localstorage + const frontend = r.tmp[0] + const items = localstorageJson[frontend] + + for (const item in items) { + localStorage.setItem(item, items[item]) + } + + window.close() +}) diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js index a1c559df..aaa52955 100644 --- a/src/assets/javascripts/utils.js +++ b/src/assets/javascripts/utils.js @@ -244,22 +244,20 @@ async function testLatency(element, instances, frontend) { return new Promise(async resolve => { let myList = {} let latencyThreshold, options - //let redirectsChecks = [] browser.storage.local.get(["options"], r => { latencyThreshold = r.options.latencyThreshold - //redirectsChecks = r.options[frontend].clearnet.enabled options = r.options }) - for (const href of instances) + for (const href of instances) { await ping(href).then(time => { + let color if (time) { myList[href] = time - let color if (time <= 1000) color = "green" else if (time <= 2000) color = "orange" else color = "red" - if (time > latencyThreshold) { + if (time > latencyThreshold && options[frontend].clearnet.enabled.includes(href)) { options[frontend].clearnet.enabled.splice(options[frontend].clearnet.enabled.indexOf(href), 1) } @@ -268,8 +266,13 @@ async function testLatency(element, instances, frontend) { else if (time > 5000) text = `ERROR: ${time - 5000}` else text = `${time}ms` element.innerHTML = `${href}: <span style="color:${color};">${text}</span>` + } else { + color = "red" + element.innerHTML = `${href}: <span style="color:${color};">Server not found</span>` + if (options[frontend].clearnet.enabled.includes(href)) options[frontend].clearnet.enabled.splice(options[frontend].clearnet.enabled.indexOf(href), 1) } }) + } browser.storage.local.set({ options }) resolve(myList) }) @@ -423,6 +426,7 @@ function latency(service, frontend, document, location) { latencyElement.addEventListener("click", reloadWindow) browser.storage.local.get(["redirects", "latency"], r => { let redirects = r.redirects + let latency = r.latency const oldHtml = latencyLabel.innerHTML latencyLabel.innerHTML = "..." testLatency(latencyLabel, redirects[frontend].clearnet, frontend).then(r => { diff --git a/src/pages/background/background.js b/src/pages/background/background.js index 3a900609..5e164d58 100644 --- a/src/pages/background/background.js +++ b/src/pages/background/background.js @@ -3,6 +3,7 @@ import generalHelper from "../../assets/javascripts/general.js"
import utils from "../../assets/javascripts/utils.js"
import servicesHelper from "../../assets/javascripts/services.js"
+import initHelper from "../../assets/javascripts/init.js"
window.browser = window.browser || window.chrome
@@ -38,7 +39,7 @@ function initDefaults() { .then(async data => {
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
await generalHelper.initDefaults()
- await servicesHelper.initDefaults()
+ await initHelper.initDefaults()
})
})
})
diff --git a/src/pages/options/index.html b/src/pages/options/index.html index 71d04fd0..384b32bd 100644 --- a/src/pages/options/index.html +++ b/src/pages/options/index.html @@ -3252,19 +3252,19 @@ <div class="about"> <div class="some-block option-block"> <h4>Donate: ♥️</h4> - <h4><a href='https://libredirect.github.io/donate'>https://libredirect.github.io/donate</a> </h4> + <h4><a href='https://libredirect.codeberg.page/donate'>https://libredirect.codeberg.page/donate</a> </h4> </div> <div class="some-block option-block"> <h4>FAQ:</h4> - <h4><a href='https://libredirect.github.io/faq'>https://libredirect.github.io/faq</a></h4> + <h4><a href='https://libredirect.codeberg.page/faq'>https://libredirect.codeberg.page/faq</a></h4> </div> <div class="some-block option-block"> <h4>Docs:</h4> - <h4><a href='https://libredirect.github.io/docs'>https://libredirect.github.io/docs</a></h4> + <h4><a href='https://libredirect.codeberg.page/docs'>https://libredirect.codeberg.page/docs</a></h4> </div> <div class="some-block option-block"> <h4>Source Code:</h4> - <h4><a href='https://libredirect.github.io/source_code'>https://libredirect.github.io/source_code</a></h4> + <h4><a href='https://libredirect.codeberg.page/source_code'>https://libredirect.codeberg.page/source_code</a></h4> </div> </div> </section> diff --git a/src/pages/options/widgets/about.ejs b/src/pages/options/widgets/about.ejs index 99202141..63c5b027 100644 --- a/src/pages/options/widgets/about.ejs +++ b/src/pages/options/widgets/about.ejs @@ -6,19 +6,19 @@ <div class="about"> <div class="some-block option-block"> <h4>Donate: ♥️</h4> - <h4><a href='https://libredirect.github.io/donate'>https://libredirect.github.io/donate</a> </h4> + <h4><a href='https://libredirect.codeberg.page/donate'>https://libredirect.codeberg.page/donate</a> </h4> </div> <div class="some-block option-block"> <h4>FAQ:</h4> - <h4><a href='https://libredirect.github.io/faq'>https://libredirect.github.io/faq</a></h4> + <h4><a href='https://libredirect.codeberg.page/faq'>https://libredirect.codeberg.page/faq</a></h4> </div> <div class="some-block option-block"> <h4>Docs:</h4> - <h4><a href='https://libredirect.github.io/docs'>https://libredirect.github.io/docs</a></h4> + <h4><a href='https://libredirect.codeberg.page/docs'>https://libredirect.codeberg.page/docs</a></h4> </div> <div class="some-block option-block"> <h4>Source Code:</h4> - <h4><a href='https://libredirect.github.io/source_code'>https://libredirect.github.io/source_code</a></h4> + <h4><a href='https://libredirect.codeberg.page/source_code'>https://libredirect.codeberg.page/source_code</a></h4> </div> </div> </section> diff --git a/src/pages/options/widgets/services.js b/src/pages/options/widgets/services.js index 98e068a1..eb7f1ba7 100644 --- a/src/pages/options/widgets/services.js +++ b/src/pages/options/widgets/services.js @@ -40,7 +40,7 @@ function changeFrontendsSettings(service) { } if (config.services[service].embeddable) { - if (!config.services[service].frontends[divs[service].frontend.value].instanceList) { + if (!config.services[service].frontends[divs[service].frontend.value].embeddable) { divs[service].embedFrontend.disabled = false for (const frontend in config.services[service].frontends) { if (config.services[service].frontends[frontend].embeddable) { |
