Squashed a few bugs
This commit is contained in:
parent
e21ecb4e1d
commit
e8a67e9172
@ -1,60 +1,94 @@
|
||||
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 = []
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(async config => {
|
||||
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 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)
|
||||
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()
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function upgradeOptions() {
|
||||
return new Promise(async resolve => {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(async config => {
|
||||
initDefaults().then(
|
||||
browser.storage.local.get(["options", "exceptions", "theme", "popupFrontends"], r => {
|
||||
let options = r.options
|
||||
let latency = {}
|
||||
options.exceptions = r.exceptions
|
||||
if (r.theme != "DEFAULT") options.theme = r.theme
|
||||
for (const service in config.services) {
|
||||
browser.storage.local.get([`disable${utils.camelCase(service)}`, `${service}RedirectType`, `${service}Frontend`, `${service}Latency`, `${service}EmbedFrontend`], r => {
|
||||
if (r) {
|
||||
options[service].enabled = r["disable" + utils.camelCase(service)]
|
||||
if (r[service + "Frontend"]) options[service].frontend = r[service + "Frontend"]
|
||||
if (r[service + "RedirectType"]) options[service].redirectType = r[service + "RedirectType"]
|
||||
if (r[service + "EmbedFrontend"] && (service != "youtube" || r[service + "EmbedFrontend"] == ("invidious" || "piped"))) options[service].EmbedFrontend = r[service + "EmbedFrontend"]
|
||||
if (r[service + "Latency"]) latency[frontend] = r[service + "Latency"]
|
||||
}
|
||||
})
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
for (const network in config.networks) {
|
||||
let protocol
|
||||
if (network == "clearnet") protocol == "normal"
|
||||
else protocol == network
|
||||
browser.storage.local.get([`${frontend}${utils.camelCase(network)}RedirectsChecks`, `${frontend}${utils.camelCase(protocol)}CustomRedirects`], r => {
|
||||
if (r) {
|
||||
options[frontend][network].checks = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]
|
||||
options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
browser.storage.local.set({ redirects, options, targets, latency, localstorage })
|
||||
resolve()
|
||||
})
|
||||
browser.storage.local.set({ options, latency })
|
||||
resolve()
|
||||
})
|
||||
)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export default {
|
||||
initDefaults,
|
||||
upgradeOptions,
|
||||
}
|
||||
|
@ -2,58 +2,49 @@ window.browser = window.browser || window.chrome
|
||||
|
||||
import utils from "./utils.js"
|
||||
|
||||
let config, redirects, options, blacklists
|
||||
|
||||
async function getConfig() {
|
||||
return new Promise(resolve => {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
config = JSON.parse(data)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
let config, options, redirects
|
||||
|
||||
function init() {
|
||||
return new Promise(async resolve => {
|
||||
browser.storage.local.get(["options", "redirects", "blacklists"], r => {
|
||||
if (r.options) {
|
||||
blacklists = r.blacklists
|
||||
redirects = r.redirects
|
||||
options = r.options
|
||||
}
|
||||
resolve()
|
||||
browser.storage.local.get(["options", "redirects"], r => {
|
||||
options = r.options
|
||||
redirects = r.redirects
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
config = JSON.parse(configData)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
await getConfig()
|
||||
await init()
|
||||
init()
|
||||
browser.storage.onChanged.addListener(init)
|
||||
|
||||
function fetchFrontendInstanceList(service, frontend) {
|
||||
function fetchFrontendInstanceList(service, frontend, redirects, options, config) {
|
||||
let tmp = []
|
||||
if (config.services[service].frontends[frontend].instanceList) {
|
||||
for (const network in config.networks) {
|
||||
tmp.push(...redirects[frontend][network], ...options[frontend][network].custom)
|
||||
tmp.push(...redirects[network], ...options[frontend][network].custom)
|
||||
}
|
||||
} else if (config.services[service].frontends[frontend].singleInstance) tmp = config.services[service].frontends[frontend].singleInstance
|
||||
return tmp
|
||||
}
|
||||
|
||||
function all(service, frontend) {
|
||||
function all(service, frontend, options, config, redirects) {
|
||||
let instances = []
|
||||
if (!frontend) {
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
instances.push(...fetchFrontendInstanceList(service, frontend))
|
||||
instances.push(...fetchFrontendInstanceList(service, frontend, redirects[frontend], options, config))
|
||||
}
|
||||
} else {
|
||||
instances.push(...fetchFrontendInstanceList(service, frontend))
|
||||
instances.push(...fetchFrontendInstanceList(service, frontend, redirects[frontend], options, config))
|
||||
}
|
||||
return instances
|
||||
}
|
||||
|
||||
function regexArray(service, url) {
|
||||
function regexArray(service, url, config) {
|
||||
let targets
|
||||
if (config.services[service].targets == "datajson") {
|
||||
browser.storage.local.get("targets", r => {
|
||||
@ -69,20 +60,20 @@ function regexArray(service, url) {
|
||||
return false
|
||||
}
|
||||
|
||||
browser.storage.onChanged.addListener(init)
|
||||
|
||||
function redirect(url, type, initiator) {
|
||||
let randomInstance
|
||||
let frontend
|
||||
let network = options.network
|
||||
for (const service in config.services) {
|
||||
if (!options[service].enabled) continue
|
||||
if (config.services[service].embeddable && type != options[service].redirectType && options[service].redirectType != "both") continue
|
||||
if (!config.services[service].embeddable && type != "main_frame") continue
|
||||
let targets = new RegExp(config.services[service].targets.join("|"), "i")
|
||||
|
||||
if (initiator && (all(service).includes(initiator.origin) || targets.test(initiator.host))) continue
|
||||
if (!regexArray(service, url)) continue
|
||||
if (!regexArray(service, url, config)) continue
|
||||
if (initiator) {
|
||||
if (targets.test(initiator.host)) continue
|
||||
if (all(service, null, options, config, redirects).includes(initiator.origin)) return "BYPASSTAB"
|
||||
}
|
||||
|
||||
if (Object.keys(config.services[service].frontends).length > 1) {
|
||||
if (type == "sub_frame") frontend = options[service].embedFrontend
|
||||
@ -90,7 +81,7 @@ function redirect(url, type, initiator) {
|
||||
} 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]
|
||||
let instanceList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
|
||||
if (instanceList.length === 0 && options.networkFallback) instanceList = [...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom]
|
||||
if (instanceList.length === 0) return
|
||||
randomInstance = utils.getRandomInstance(instanceList)
|
||||
@ -385,152 +376,276 @@ function redirect(url, type, initiator) {
|
||||
}
|
||||
}
|
||||
|
||||
function computeService(url, returnFrontend) {
|
||||
for (const service in config.services) {
|
||||
if (regexArray(service, url)) {
|
||||
if (returnFrontend) return [service, null]
|
||||
else return service
|
||||
} else {
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
if (all(service, frontend).includes(utils.protocolHost(url))) {
|
||||
if (returnFrontend) return [service, frontend]
|
||||
else return service
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (returnFrontend) return [null, null]
|
||||
else return null
|
||||
}
|
||||
|
||||
function switchInstance(url) {
|
||||
return new Promise(async resolve => {
|
||||
const protocolHost = utils.protocolHost(url)
|
||||
for (const service in config.services) {
|
||||
if (!options[service].enabled) continue
|
||||
if (!all(service).includes(protocolHost)) continue
|
||||
|
||||
let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom]
|
||||
if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom]
|
||||
|
||||
let oldInstance
|
||||
const i = instancesList.indexOf(protocolHost)
|
||||
if (i > -1) {
|
||||
oldInstance = instancesList[i]
|
||||
instancesList.splice(i, 1)
|
||||
}
|
||||
if (instancesList.length === 0) {
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
const randomInstance = utils.getRandomInstance(instancesList)
|
||||
const oldUrl = `${oldInstance}${url.pathname}${url.search}`
|
||||
// This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx
|
||||
// Doesn't work because of .includes array method, not a top priotiry atm
|
||||
resolve(oldUrl.replace(oldInstance, randomInstance))
|
||||
return
|
||||
}
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
function reverse(url) {
|
||||
return new Promise(async resolve => {
|
||||
let protocolHost = utils.protocolHost(url)
|
||||
let currentService
|
||||
for (const service in config.services) {
|
||||
if (!all(service).includes(protocolHost)) continue
|
||||
currentService = service
|
||||
}
|
||||
switch (currentService) {
|
||||
case "instagram":
|
||||
if (url.pathname.startsWith("/p")) resolve(`https://instagram.com${url.pathname.replace("/p", "")}${url.search}`)
|
||||
if (url.pathname.startsWith("/u")) resolve(`https://instagram.com${url.pathname.replace("/u", "")}${url.search}`)
|
||||
resolve(config.services[currentService].url + url.pathname + url.search)
|
||||
return
|
||||
case "youtube":
|
||||
case "imdb":
|
||||
case "imgur":
|
||||
case "tiktok":
|
||||
case "twitter":
|
||||
resolve(config.services[currentService].url + url.pathname + url.search)
|
||||
return
|
||||
default:
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function unifyPreferences(url, tabId) {
|
||||
return new Promise(async resolve => {
|
||||
const protocolHost = utils.protocolHost(url)
|
||||
let currentFrontend, currentService
|
||||
serviceloop: for (const service in config.services) {
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
if (all(service, frontend).includes(protocolHost)) {
|
||||
currentFrontend = frontend
|
||||
currentService = service
|
||||
break serviceloop
|
||||
}
|
||||
}
|
||||
}
|
||||
let instancesList = [...options[currentFrontend][options.network].enabled, ...options[currentFrontend][options.network].custom]
|
||||
if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[currentFrontend].clearnet.enabled, ...options[currentFrontend].clearnet.custom)
|
||||
|
||||
const frontend = config.services[currentService].frontends[currentFrontend]
|
||||
if ("cookies" in frontend.preferences) {
|
||||
for (const cookie of frontend.preferences.cookies) {
|
||||
await utils.copyCookie(currentFrontend, url, instancesList, cookie)
|
||||
}
|
||||
}
|
||||
if ("localstorage" in frontend.preferences) {
|
||||
browser.storage.local.set({ tmp: [currentFrontend, frontend.preferences.localstorage] })
|
||||
browser.tabs.executeScript(tabId, {
|
||||
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, {
|
||||
file: "/assets/javascripts/set-localstorage.js",
|
||||
runAt: "document_start",
|
||||
})
|
||||
)
|
||||
}
|
||||
if ("indexeddb" in frontend.preferences) {
|
||||
}
|
||||
if ("token" in frontend.preferences) {
|
||||
}
|
||||
resolve(true)
|
||||
})
|
||||
}
|
||||
|
||||
function setRedirects(redirects) {
|
||||
//browser.storage.local.get(["options", "blacklists"], async r => {
|
||||
//let options = r.options
|
||||
let targets = {}
|
||||
for (const service in config.services) {
|
||||
if (config.services[service].targets == "datajson") {
|
||||
targets[service] = redirects[service]
|
||||
}
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
if (config.services[service].frontends[frontend].instanceList) {
|
||||
for (const network in config.networks) {
|
||||
options[frontend][network].enabled = redirects[frontend][network]
|
||||
}
|
||||
for (const blacklist in blacklists) {
|
||||
for (const instance of blacklist) {
|
||||
let i = options[frontend].clearnet.enabled.indexOf(instance)
|
||||
if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
|
||||
async function computeService(url, returnFrontend) {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
const config = JSON.parse(configData)
|
||||
browser.storage.local.get(["redirects", "options"], r => {
|
||||
const redirects = r.redirects
|
||||
const options = r.options
|
||||
for (const service in config.services) {
|
||||
if (regexArray(service, url, config)) {
|
||||
if (returnFrontend) return [service, null]
|
||||
else return service
|
||||
} else {
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
if (all(service, frontend, options, config, redirects).includes(utils.protocolHost(url))) {
|
||||
if (returnFrontend) {
|
||||
return [service, frontend]
|
||||
} else return service
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (returnFrontend) return [null, null]
|
||||
// else return null
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function switchInstance(url) {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
const config = JSON.parse(configData)
|
||||
browser.storage.local.get(["redirects", "options"], r => {
|
||||
const redirects = r.redirects
|
||||
const options = r.options
|
||||
const protocolHost = utils.protocolHost(url)
|
||||
for (const service in config.services) {
|
||||
if (!options[service].enabled) continue
|
||||
if (!all(service, null, options, config, redirects).includes(protocolHost)) continue
|
||||
|
||||
let instancesList = [...options[options[service].frontend][options.network].enabled, ...options[options[service].frontend][options.network].custom]
|
||||
if (instancesList.length === 0 && options.networkFallback) instancesList = [...options[options[service].frontend].clearnet.enabled, ...options[options[service].frontend].clearnet.custom]
|
||||
|
||||
let oldInstance
|
||||
const i = instancesList.indexOf(protocolHost)
|
||||
if (i > -1) {
|
||||
oldInstance = instancesList[i]
|
||||
instancesList.splice(i, 1)
|
||||
}
|
||||
if (instancesList.length === 0) return
|
||||
const randomInstance = utils.getRandomInstance(instancesList)
|
||||
const oldUrl = `${oldInstance}${url.pathname}${url.search}`
|
||||
// This is to make instance switching work when the instance depends on the pathname, eg https://darmarit.org/searx
|
||||
// Doesn't work because of .includes array method, not a top priotiry atm
|
||||
return oldUrl.replace(oldInstance, randomInstance)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function reverse(url) {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
const config = JSON.parse(configData)
|
||||
browser.storage.local.get(["redirects", "options"], r => {
|
||||
const redirects = r.redirects
|
||||
const options = r.options
|
||||
let protocolHost = utils.protocolHost(url)
|
||||
for (const service in config.services) {
|
||||
if (!all(service, null, options, config, redirects).includes(protocolHost)) continue
|
||||
|
||||
switch (service) {
|
||||
case "instagram":
|
||||
if (url.pathname.startsWith("/p")) return `https://instagram.com${url.pathname.replace("/p", "")}${url.search}`
|
||||
if (url.pathname.startsWith("/u")) return `https://instagram.com${url.pathname.replace("/u", "")}${url.search}`
|
||||
return config.services[service].url + url.pathname + url.search
|
||||
case "youtube":
|
||||
case "imdb":
|
||||
case "imgur":
|
||||
case "tiktok":
|
||||
case "twitter":
|
||||
case "reddit":
|
||||
return config.services[service].url + url.pathname + url.search
|
||||
default:
|
||||
return
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function unifyPreferences(url, tabId) {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
const config = JSON.parse(configData)
|
||||
browser.storage.local.get(["options", "reidrects"], r => {
|
||||
const redirects = r.redirects
|
||||
const options = r.options
|
||||
const protocolHost = utils.protocolHost(url)
|
||||
for (const service in config.services) {
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
if (all(service, frontend, options, config, redirects).includes(protocolHost)) {
|
||||
let instancesList = [...options[frontend][options.network].enabled, ...options[frontend][options.network].custom]
|
||||
if (options.networkFallback && options.network != "clearnet") instancesList.push(...options[frontend].clearnet.enabled, ...options[frontend].clearnet.custom)
|
||||
|
||||
const frontend = config.services[service].frontends[frontend]
|
||||
if ("cookies" in frontend.preferences) {
|
||||
for (const cookie of frontend.preferences.cookies) {
|
||||
utils.copyCookie(frontend, url, instancesList, cookie)
|
||||
}
|
||||
}
|
||||
if ("localstorage" in frontend.preferences) {
|
||||
browser.storage.local.set({ tmp: [frontend, frontend.preferences.localstorage] })
|
||||
browser.tabs.executeScript(tabId, {
|
||||
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, {
|
||||
file: "/assets/javascripts/set-localstorage.js",
|
||||
runAt: "document_start",
|
||||
})
|
||||
)
|
||||
}
|
||||
if ("indexeddb" in frontend.preferences) {
|
||||
}
|
||||
if ("token" in frontend.preferences) {
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
async function setRedirects(redirects) {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
//browser.storage.local.get(["options", "blacklists"], async r => {
|
||||
//const options = r.options
|
||||
const config = JSON.parse(configData)
|
||||
let targets = {}
|
||||
for (const service in config.services) {
|
||||
if (config.services[service].targets == "datajson") {
|
||||
targets[service] = redirects[service]
|
||||
}
|
||||
/*
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
if (config.services[service].frontends[frontend].instanceList) {
|
||||
for (const network in config.networks) {
|
||||
options[frontend][network].enabled = redirects[frontend][network]
|
||||
}
|
||||
for (const blacklist in r.blacklists) {
|
||||
for (const instance of blacklist) {
|
||||
let i = options[frontend].clearnet.enabled.indexOf(instance)
|
||||
if (i > -1) options[frontend].clearnet.enabled.splice(i, 1)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
// The above will be implemented with https://github.com/libredirect/libredirect/issues/334
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(redirects)
|
||||
browser.storage.local.set({ redirects, targets, options })
|
||||
//})
|
||||
browser.storage.local.set({ redirects, targets /*, options*/ })
|
||||
//})
|
||||
})
|
||||
}
|
||||
|
||||
function initDefaults() {
|
||||
return new Promise(resolve => {
|
||||
fetch("/instances/data.json")
|
||||
.then(response => response.text())
|
||||
.then(data => {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
browser.storage.local.get(["options", "blacklists"], r => {
|
||||
let redirects = JSON.parse(data)
|
||||
let options = r.options
|
||||
let targets = {}
|
||||
let config = JSON.parse(configData)
|
||||
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 upgradeOptions() {
|
||||
return new Promise(resolve => {
|
||||
fetch("/config/config.json")
|
||||
.then(response => response.text())
|
||||
.then(configData => {
|
||||
browser.storage.local.get(["options", "exceptions", "theme", "popupFrontends", "autoRedirect", "firstPartyIsolate"], r => {
|
||||
let options = r.options
|
||||
let latency = {}
|
||||
const config = JSON.parse(configData)
|
||||
options.exceptions = r.exceptions
|
||||
if (r.theme != "DEFAULT") options.theme = r.theme
|
||||
options.popupServices = r.popupFrontends
|
||||
options.firstPartyIsolate = r.firstPartyIsolate
|
||||
options.autoRedirect = r.autoRedirect
|
||||
for (const service in config.services) {
|
||||
browser.storage.local.get([`disable${utils.camelCase(service)}`, `${service}RedirectType`, `${service}Frontend`, `${service}Latency`, `${service}EmbedFrontend`], r => {
|
||||
if (r) {
|
||||
options[service].enabled = !r["disable" + utils.camelCase(service)]
|
||||
if (r[service + "Frontend"]) {
|
||||
if (r[service + "Frontend"] == "yatte") options[service].frontend = "yattee"
|
||||
else options[service].frontend = r[service + "Frontend"]
|
||||
}
|
||||
if (r[service + "RedirectType"]) options[service].redirectType = r[service + "RedirectType"]
|
||||
if (r[service + "EmbedFrontend"] && (service != "youtube" || r[service + "EmbedFrontend"] == "invidious" || "piped")) options[service].embedFrontend = r[service + "EmbedFrontend"]
|
||||
for (const frontend in config.services[service].frontends) {
|
||||
browser.local.storage.get(`${frontend}Latency`, r => {
|
||||
if (r) latency[frontend] = r[frontend + "Latency"]
|
||||
for (const network in config.networks) {
|
||||
let protocol
|
||||
if (network == "clearnet") protocol = "normal"
|
||||
else protocol = network
|
||||
browser.storage.local.get([`${frontend}${utils.camelCase(protocol)}RedirectsChecks`, `${frontend}${utils.camelCase(protocol)}CustomRedirects`], r => {
|
||||
if (r) {
|
||||
options[frontend][network].checks = r[frontend + utils.camelCase(protocol) + "RedirectsChecks"]
|
||||
options[frontend][network].custom = r[frontend + utils.camelCase(protocol) + "CustomRedirects"]
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
browser.storage.local.set({ options, latency })
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
export default {
|
||||
@ -540,4 +655,6 @@ export default {
|
||||
reverse,
|
||||
unifyPreferences,
|
||||
setRedirects,
|
||||
initDefaults,
|
||||
upgradeOptions,
|
||||
}
|
||||
|
@ -342,7 +342,7 @@ function getPreferencesFromToken(frontend, targetUrl, urls, name, endpoint) {
|
||||
})
|
||||
}
|
||||
|
||||
function copyRaw(test, copyRawElement) {
|
||||
function copyRaw(test, copyRawElement, config) {
|
||||
return new Promise(resolve => {
|
||||
browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
|
||||
let currTab = tabs[0]
|
||||
@ -355,7 +355,7 @@ function copyRaw(test, copyRawElement) {
|
||||
return
|
||||
}
|
||||
|
||||
let newUrl = await servicesHelper.reverse(url)
|
||||
let newUrl = servicesHelper.reverse(url, config)
|
||||
|
||||
if (newUrl) {
|
||||
resolve(newUrl)
|
||||
@ -387,7 +387,7 @@ function unify() {
|
||||
return
|
||||
}
|
||||
|
||||
let result = await servicesHelper.unifyPreferences(url, currTab.id)
|
||||
const result = await servicesHelper.unifyPreferences(url, currTab.id)
|
||||
|
||||
resolve(result)
|
||||
}
|
||||
@ -407,7 +407,7 @@ function switchInstance(test) {
|
||||
resolve()
|
||||
return
|
||||
}
|
||||
let newUrl = await servicesHelper.switchInstance(url)
|
||||
const newUrl = await servicesHelper.switchInstance(url)
|
||||
|
||||
if (newUrl) {
|
||||
if (!test) browser.tabs.update({ url: newUrl })
|
||||
|
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "__MSG_extensionName__",
|
||||
"description": "__MSG_extensionDescription__",
|
||||
"version": "2.2.1",
|
||||
"version": "2.3.0",
|
||||
"manifest_version": 2,
|
||||
"browser_specific_settings": {
|
||||
"gecko": {
|
||||
|
@ -3,11 +3,23 @@
|
||||
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
|
||||
|
||||
browser.runtime.onInstalled.addListener(async details => {
|
||||
function initDefaults() {
|
||||
browser.storage.local.clear(() => {
|
||||
fetch("/instances/blacklist.json")
|
||||
.then(response => response.text())
|
||||
.then(async data => {
|
||||
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
|
||||
await generalHelper.initDefaults()
|
||||
await servicesHelper.initDefaults()
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
browser.runtime.onInstalled.addListener(details => {
|
||||
// if (details.reason == 'install' || (details.reason == "update" && details.previousVersion != browser.runtime.getManifest().version)) {
|
||||
// if (details.reason == "update")
|
||||
// browser.storage.local.get(null, r => {
|
||||
@ -24,27 +36,22 @@ browser.runtime.onInstalled.addListener(async details => {
|
||||
initDefaults()
|
||||
break
|
||||
case "update":
|
||||
switch (details.previousVersion) {
|
||||
case "2.2.1":
|
||||
initDefaults()
|
||||
break
|
||||
}
|
||||
fetch("/instances/blacklist.json")
|
||||
.then(response => response.text())
|
||||
.then(async data => {
|
||||
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
|
||||
switch (details.previousVersion) {
|
||||
case "2.2.1":
|
||||
await generalHelper.initDefaults()
|
||||
await servicesHelper.initDefaults()
|
||||
await servicesHelper.upgradeOptions()
|
||||
break
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
function initDefaults() {
|
||||
browser.storage.local.clear(() => {
|
||||
fetch("/instances/blacklist.json")
|
||||
.then(response => response.text())
|
||||
.then(async data => {
|
||||
browser.storage.local.set({ blacklists: JSON.parse(data) }, async () => {
|
||||
await generalHelper.initDefaults()
|
||||
await initHelper.initDefaults()
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
let BYPASSTABs = []
|
||||
browser.webRequest.onBeforeRequest.addListener(
|
||||
details => {
|
||||
|
@ -150,6 +150,11 @@
|
||||
</button>
|
||||
</div>
|
||||
</form>
|
||||
<div class="buttons buttons-inline"><a class="button button-inline" id="test">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
|
||||
<path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"></path>
|
||||
</svg>
|
||||
Test Test Yes Yes</a> </div>
|
||||
<div class="checklist" id="exceptions-custom-checklist"></div>
|
||||
<div class="buttons buttons-inline"><a class="button button-inline" id="update-instances">
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="currentColor">
|
||||
|
@ -58,6 +58,7 @@ function exportSettings() {
|
||||
exportSettings()
|
||||
|
||||
document.getElementById("general_page").addEventListener("click", exportSettings)
|
||||
document.getElementById("test").addEventListener("click", servicesHelper.upgradeOptions)
|
||||
|
||||
let importSettingsElement = document.getElementById("import-settings")
|
||||
let importSettingsElementText = document.getElementById("import_settings_text")
|
||||
|
@ -2,25 +2,11 @@
|
||||
window.browser = window.browser || window.chrome
|
||||
|
||||
import utils from "../../assets/javascripts/utils.js"
|
||||
import generalHelper from "../../assets/javascripts/general.js"
|
||||
// import generalHelper from "../../assets/javascripts/general.js"
|
||||
import serviceHelper from "../../assets/javascripts/services.js"
|
||||
|
||||
utils.switchInstance(true).then(r => {
|
||||
if (!r) document.getElementById("change_instance_div").style.display = "none"
|
||||
else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false))
|
||||
})
|
||||
|
||||
utils.copyRaw(true).then(r => {
|
||||
if (!r) document.getElementById("copy_raw_div").style.display = "none"
|
||||
else {
|
||||
const copy_raw = document.getElementById("copy_raw")
|
||||
copy_raw.addEventListener("click", () => utils.copyRaw(false, copy_raw))
|
||||
}
|
||||
})
|
||||
document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage())
|
||||
|
||||
let config
|
||||
let divs = {}
|
||||
let config,
|
||||
divs = {}
|
||||
|
||||
async function getConfig() {
|
||||
return new Promise(resolve => {
|
||||
@ -35,6 +21,20 @@ async function getConfig() {
|
||||
|
||||
await getConfig()
|
||||
|
||||
utils.switchInstance(true).then(r => {
|
||||
if (!r) document.getElementById("change_instance_div").style.display = "none"
|
||||
else document.getElementById("change_instance").addEventListener("click", () => utils.switchInstance(false))
|
||||
})
|
||||
|
||||
utils.copyRaw(true, null, config).then(r => {
|
||||
if (!r) document.getElementById("copy_raw_div").style.display = "none"
|
||||
else {
|
||||
const copy_raw = document.getElementById("copy_raw")
|
||||
copy_raw.addEventListener("click", () => utils.copyRaw(false, copy_raw))
|
||||
}
|
||||
})
|
||||
document.getElementById("more-options").addEventListener("click", () => browser.runtime.openOptionsPage())
|
||||
|
||||
const allSites = document.getElementsByClassName("all_sites")[0]
|
||||
const currSite = document.getElementsByClassName("current_site")[0]
|
||||
|
||||
@ -78,11 +78,16 @@ browser.storage.local.get("options", r => {
|
||||
return
|
||||
}
|
||||
|
||||
const [service, frontend] = serviceHelper.computeService(url, true)
|
||||
let service = await serviceHelper.computeService(url, true)
|
||||
let frontend
|
||||
if (service) {
|
||||
if (service[1]) {
|
||||
frontend = service[1]
|
||||
service = frontend[0]
|
||||
}
|
||||
divs[service].current.classList.remove("hide")
|
||||
divs[service].all.classList.add("hide")
|
||||
if (config.services[service].frontends[frontend].preferences) {
|
||||
if (config.services[service].frontends[frontend].preferences && !config.services[service].frontends[frontend].preferences.token) {
|
||||
const unify = document.getElementById("unify")
|
||||
const textElement = document.getElementById("unify").getElementsByTagName("h4")[0]
|
||||
unify.addEventListener("click", () => {
|
||||
|
Loading…
x
Reference in New Issue
Block a user