Moving Server error listener to popup https://github.com/libredirect/browser_extension/issues/992
This commit is contained in:
parent
161c19c083
commit
823af5a0a3
|
@ -669,7 +669,9 @@ function computeService(url) {
|
||||||
export function computeFrontend(url) {
|
export function computeFrontend(url) {
|
||||||
for (const service in config.services) {
|
for (const service in config.services) {
|
||||||
for (const frontend in config.services[service].frontends) {
|
for (const frontend in config.services[service].frontends) {
|
||||||
if (all(service, frontend, options, config).findIndex(instance => url.href.startsWith(instance)) >= 0) {
|
const instances = all(service, frontend, options, config)
|
||||||
|
const i = instances.findIndex(instance => url.href.startsWith(instance))
|
||||||
|
if (i >= 0) {
|
||||||
return { service, frontend }
|
return { service, frontend }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,30 +117,6 @@ browser.webRequest.onBeforeRequest.addListener(
|
||||||
["blocking"]
|
["blocking"]
|
||||||
)
|
)
|
||||||
|
|
||||||
// browser.webRequest.onHeadersReceived.addListener(
|
|
||||||
// details => {
|
|
||||||
// if (details.statusCode >= 501 || details.statusCode == 429 || details.statusCode == 403) {
|
|
||||||
// const url = new URL(details.url)
|
|
||||||
// const r = servicesHelper.computeFrontend(url)
|
|
||||||
// if (!r) return
|
|
||||||
// const { service, frontend } = r
|
|
||||||
// const params = new URLSearchParams({
|
|
||||||
// message: "server_error",
|
|
||||||
// code: details.statusCode,
|
|
||||||
// url: url.href,
|
|
||||||
// frontend: frontend,
|
|
||||||
// service: service,
|
|
||||||
// })
|
|
||||||
// setTimeout(() => {
|
|
||||||
// browser.tabs.update({
|
|
||||||
// url: browser.runtime.getURL(`/pages/messages/index.html?${params.toString()}`),
|
|
||||||
// })
|
|
||||||
// }, 2000)
|
|
||||||
// }
|
|
||||||
// },
|
|
||||||
// { urls: ["<all_urls>"] }
|
|
||||||
// )
|
|
||||||
|
|
||||||
browser.tabs.onRemoved.addListener(tabId => {
|
browser.tabs.onRemoved.addListener(tabId => {
|
||||||
if (tabIdRedirects[tabId] != undefined) {
|
if (tabIdRedirects[tabId] != undefined) {
|
||||||
delete tabIdRedirects[tabId]
|
delete tabIdRedirects[tabId]
|
||||||
|
|
|
@ -80,39 +80,6 @@
|
||||||
const newUrl = await servicesHelper.redirectAsync(oldUrl, "main_frame", null, null, false, true)
|
const newUrl = await servicesHelper.redirectAsync(oldUrl, "main_frame", null, null, false, true)
|
||||||
browser.tabs.update({ url: newUrl })
|
browser.tabs.update({ url: newUrl })
|
||||||
}
|
}
|
||||||
|
|
||||||
async function switchInstance() {
|
|
||||||
const newUrl = await servicesHelper.switchInstance(oldUrl)
|
|
||||||
browser.tabs.update({ url: newUrl })
|
|
||||||
}
|
|
||||||
|
|
||||||
async function removeInstance() {
|
|
||||||
const service = await servicesHelper.computeService(oldUrl)
|
|
||||||
const frontend = params.get("frontend")
|
|
||||||
const i = _options[frontend].findIndex(instance => oldUrl.href.startsWith(instance))
|
|
||||||
_options[frontend].splice(i, 1)
|
|
||||||
options.set(_options)
|
|
||||||
const newUrl = await servicesHelper.switchInstance(oldUrl, service)
|
|
||||||
browser.tabs.update({ url: newUrl })
|
|
||||||
}
|
|
||||||
|
|
||||||
async function removeAndAutoPickInstance() {
|
|
||||||
const service = await servicesHelper.computeService(oldUrl)
|
|
||||||
|
|
||||||
const frontend = params.get("frontend")
|
|
||||||
const i = _options[frontend].findIndex(instance => oldUrl.href.startsWith(instance))
|
|
||||||
_options[frontend].splice(i, 1)
|
|
||||||
options.set(_options)
|
|
||||||
await autoPick()
|
|
||||||
const newUrl = await servicesHelper.switchInstance(oldUrl, service)
|
|
||||||
browser.tabs.update({ url: newUrl })
|
|
||||||
}
|
|
||||||
|
|
||||||
async function addAutoPickInstance() {
|
|
||||||
await autoPick()
|
|
||||||
const newUrl = await servicesHelper.switchInstance(oldUrl)
|
|
||||||
browser.tabs.update({ url: newUrl })
|
|
||||||
}
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if _options && _config}
|
{#if _options && _config}
|
||||||
|
@ -124,34 +91,6 @@
|
||||||
{browser.i18n.getMessage("enable") || "Enable"}
|
{browser.i18n.getMessage("enable") || "Enable"}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
{:else if params.get("message") == "server_error"}
|
|
||||||
<!-- https://httpstat.us/403 for testing -->
|
|
||||||
<div>
|
|
||||||
<h1>Your selected instance gave out an error: {params.get("code")}</h1>
|
|
||||||
{#if _options[params.get("frontend")].length > 1}
|
|
||||||
<Button on:click={switchInstance}>
|
|
||||||
<SwitchInstanceIcon class="margin margin_{document.body.dir}" />
|
|
||||||
{browser.i18n.getMessage("switchInstance") || "Switch Instance"}
|
|
||||||
</Button>
|
|
||||||
<Button on:click={removeInstance}>
|
|
||||||
<SwitchInstanceIcon class="margin margin_{document.body.dir}" />
|
|
||||||
{browser.i18n.getMessage("removeInstance") || "Remove Instance"}
|
|
||||||
+
|
|
||||||
{browser.i18n.getMessage("switchInstance") || "Switch Instance"}
|
|
||||||
</Button>
|
|
||||||
{:else}
|
|
||||||
<Button on:click={addAutoPickInstance} disabled={autoPicking}>
|
|
||||||
<AutoPickIcon class="margin margin_{document.body.dir}" />
|
|
||||||
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
|
|
||||||
</Button>
|
|
||||||
<Button on:click={removeAndAutoPickInstance} disabled={autoPicking}>
|
|
||||||
<AutoPickIcon class="margin margin_{document.body.dir}" />
|
|
||||||
{browser.i18n.getMessage("removeInstance") || "Remove Instance"}
|
|
||||||
+
|
|
||||||
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
|
|
||||||
</Button>
|
|
||||||
{/if}
|
|
||||||
</div>
|
|
||||||
{:else if params.get("message") == "no_instance"}
|
{:else if params.get("message") == "no_instance"}
|
||||||
<div>
|
<div>
|
||||||
<h1>You have no instance selected for this frontend</h1>
|
<h1>You have no instance selected for this frontend</h1>
|
||||||
|
|
|
@ -10,11 +10,14 @@
|
||||||
import SettingsIcon from "../icons/SettingsIcon.svelte"
|
import SettingsIcon from "../icons/SettingsIcon.svelte"
|
||||||
import { options, config } from "./stores"
|
import { options, config } from "./stores"
|
||||||
import { onDestroy } from "svelte"
|
import { onDestroy } from "svelte"
|
||||||
import servicesHelper from "../../assets/javascripts/services"
|
import servicesHelper, { computeFrontend } from "../../assets/javascripts/services"
|
||||||
import Switch from "./components/Switch.svelte"
|
import Switch from "./components/Switch.svelte"
|
||||||
|
import AutoPickIcon from "../icons/AutoPickIcon.svelte"
|
||||||
|
import utils from "../../assets/javascripts/utils"
|
||||||
|
|
||||||
let _options
|
let _options
|
||||||
let _config
|
let _config
|
||||||
|
let autoPicking = false
|
||||||
|
|
||||||
const unsubscribeOptions = options.subscribe(val => (_options = val))
|
const unsubscribeOptions = options.subscribe(val => (_options = val))
|
||||||
const unsubscribeConfig = config.subscribe(val => (_config = val))
|
const unsubscribeConfig = config.subscribe(val => (_config = val))
|
||||||
|
@ -28,6 +31,8 @@
|
||||||
let redirectToOriginal
|
let redirectToOriginal
|
||||||
let redirect
|
let redirect
|
||||||
let currentService
|
let currentService
|
||||||
|
let frontend
|
||||||
|
let service
|
||||||
browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
|
browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
|
||||||
if (tabs[0].url) {
|
if (tabs[0].url) {
|
||||||
url = new URL(tabs[0].url)
|
url = new URL(tabs[0].url)
|
||||||
|
@ -35,8 +40,51 @@
|
||||||
servicesHelper.reverse(url).then(r => (redirectToOriginal = r))
|
servicesHelper.reverse(url).then(r => (redirectToOriginal = r))
|
||||||
servicesHelper.redirectAsync(url, "main_frame", null, null, false, true).then(r => (redirect = r))
|
servicesHelper.redirectAsync(url, "main_frame", null, null, false, true).then(r => (redirect = r))
|
||||||
servicesHelper.computeService(url).then(r => (currentService = r))
|
servicesHelper.computeService(url).then(r => (currentService = r))
|
||||||
|
const computed = servicesHelper.computeFrontend(url)
|
||||||
|
if (computed) {
|
||||||
|
;({ service, frontend } = computed)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
async function removeInstance() {
|
||||||
|
const i = _options[frontend].findIndex(instance => url.href.startsWith(instance))
|
||||||
|
_options[frontend].splice(i, 1)
|
||||||
|
options.set(_options)
|
||||||
|
const newUrl = await servicesHelper.switchInstance(url, service)
|
||||||
|
browser.tabs.update({ url: newUrl })
|
||||||
|
}
|
||||||
|
|
||||||
|
async function autoPick() {
|
||||||
|
autoPicking = true
|
||||||
|
const redirects = await utils.getList(_options)
|
||||||
|
const instances = utils.randomInstances(redirects[frontend]["clearnet"], 5)
|
||||||
|
const pings = await Promise.all([
|
||||||
|
...instances.map(async instance => {
|
||||||
|
return [instance, await utils.ping(instance)]
|
||||||
|
}),
|
||||||
|
])
|
||||||
|
pings.sort((a, b) => a[1] - b[1])
|
||||||
|
_options[frontend].push(pings[0][0])
|
||||||
|
options.set(_options)
|
||||||
|
autoPicking = false
|
||||||
|
}
|
||||||
|
|
||||||
|
async function addAutoPickInstance() {
|
||||||
|
await autoPick()
|
||||||
|
const newUrl = await servicesHelper.switchInstance(url)
|
||||||
|
browser.tabs.update({ url: newUrl })
|
||||||
|
}
|
||||||
|
|
||||||
|
async function removeAndAutoPickInstance() {
|
||||||
|
const i = _options[frontend].findIndex(instance => url.href.startsWith(instance))
|
||||||
|
_options[frontend].splice(i, 1)
|
||||||
|
options.set(_options)
|
||||||
|
await autoPick()
|
||||||
|
const newUrl = await servicesHelper.switchInstance(url, service)
|
||||||
|
browser.tabs.update({ url: newUrl })
|
||||||
|
}
|
||||||
|
$: console.log("autoPicking", autoPicking)
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class={document.body.dir}>
|
<div class={document.body.dir}>
|
||||||
|
@ -56,17 +104,44 @@
|
||||||
</Row>
|
</Row>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if switchInstance}
|
{#if service && frontend}
|
||||||
<Row
|
{#if _options[frontend].length > 1}
|
||||||
class="interactive"
|
{#if switchInstance}
|
||||||
on:click={async () =>
|
<Row
|
||||||
browser.tabs.update({ url: switchInstance }, () => {
|
class="interactive"
|
||||||
window.close()
|
on:click={async () =>
|
||||||
})}
|
browser.tabs.update({ url: switchInstance }, () => {
|
||||||
>
|
window.close()
|
||||||
<Label>{browser.i18n.getMessage("switchInstance") || "Switch Instance"}</Label>
|
})}
|
||||||
<SwitchInstanceIcon />
|
>
|
||||||
</Row>
|
<Label>{browser.i18n.getMessage("switchInstance") || "Switch Instance"}</Label>
|
||||||
|
<SwitchInstanceIcon />
|
||||||
|
</Row>
|
||||||
|
{/if}
|
||||||
|
<Row class="interactive" on:click={removeInstance}>
|
||||||
|
<Label>
|
||||||
|
{browser.i18n.getMessage("remove") || "Remove"}
|
||||||
|
+
|
||||||
|
{browser.i18n.getMessage("switchInstance") || "Switch Instance"}
|
||||||
|
</Label>
|
||||||
|
<SwitchInstanceIcon />
|
||||||
|
</Row>
|
||||||
|
{:else}
|
||||||
|
<Row class={"interactive " + (autoPicking ? "disabled" : "")} on:click={removeAndAutoPickInstance}>
|
||||||
|
<Label>
|
||||||
|
{browser.i18n.getMessage("remove") || "Remove"}
|
||||||
|
+
|
||||||
|
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
|
||||||
|
</Label>
|
||||||
|
<AutoPickIcon />
|
||||||
|
</Row>
|
||||||
|
<Row class={"interactive " + (autoPicking ? "disabled" : "")} on:click={addAutoPickInstance}>
|
||||||
|
<Label>
|
||||||
|
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
|
||||||
|
</Label>
|
||||||
|
<AutoPickIcon />
|
||||||
|
</Row>
|
||||||
|
{/if}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
{#if redirectToOriginal}
|
{#if redirectToOriginal}
|
||||||
|
@ -130,6 +205,20 @@
|
||||||
transform: translateY(1px);
|
transform: translateY(1px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:global(.disabled) {
|
||||||
|
cursor: not-allowed;
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.disabled:hover) {
|
||||||
|
color: var(--text);
|
||||||
|
cursor: not-allowed;
|
||||||
|
}
|
||||||
|
|
||||||
|
:global(.disabled:active) {
|
||||||
|
transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
:global(img, svg) {
|
:global(img, svg) {
|
||||||
margin-right: 5px;
|
margin-right: 5px;
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
|
|
|
@ -1,13 +1,12 @@
|
||||||
<div {...$$props} on:click>
|
<div {...$$props} on:click>
|
||||||
<slot></slot>
|
<slot></slot>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<style>
|
|
||||||
div {
|
|
||||||
justify-content: space-between;
|
|
||||||
display: flex;
|
|
||||||
align-items: center;
|
|
||||||
margin: 10px 0;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
justify-content: space-between;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
margin: 10px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
Loading…
Reference in New Issue