aboutsummaryrefslogtreecommitdiffstats
path: root/src/pages
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/messages_src/App.svelte43
-rw-r--r--src/pages/options_src/Services/Instances.svelte57
-rw-r--r--src/pages/popup_src/Buttons.svelte95
3 files changed, 94 insertions, 101 deletions
diff --git a/src/pages/messages_src/App.svelte b/src/pages/messages_src/App.svelte
index 9f464ac7..82526530 100644
--- a/src/pages/messages_src/App.svelte
+++ b/src/pages/messages_src/App.svelte
@@ -9,7 +9,6 @@
import { options, config, page } from "./stores"
import Button from "../components/Button.svelte"
import AutoPickIcon from "../icons/AutoPickIcon.svelte"
- import SwitchInstanceIcon from "../icons/SwitchInstanceIcon.svelte"
let _options
const unsubscribeOptions = options.subscribe(val => {
@@ -49,33 +48,16 @@
const oldUrl = new URL(params.get("url"))
async function autoPick() {
- const frontend = params.get("frontend")
autoPicking = true
+ const frontend = params.get("frontend")
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])
+ const clearnet = redirects[frontend]["clearnet"]
+ const instance = await utils.autoPickInstance(clearnet)
+ _options[frontend].push(instance)
options.set(_options)
autoPicking = false
}
- async function autoPickInstance() {
- await autoPick()
- await redirectUrl()
- }
-
- async function enableService() {
- const service = await servicesHelper.computeService(oldUrl)
- _options[service].enabled = true
- options.set(_options)
- await redirectUrl()
- }
-
async function redirectUrl() {
const newUrl = await servicesHelper.redirectAsync(oldUrl, "main_frame", null, null, false, true)
browser.tabs.update({ url: newUrl })
@@ -87,14 +69,27 @@
{#if params.get("message") == "disabled"}
<div>
<h1>You disabled redirections for this service</h1>
- <Button on:click={enableService}>
+ <Button
+ on:click={async () => {
+ const { service } = await servicesHelper.computeServiceFrontend(oldUrl)
+ _options[service].enabled = true
+ options.set(_options)
+ await redirectUrl()
+ }}
+ >
{browser.i18n.getMessage("enable") || "Enable"}
</Button>
</div>
{:else if params.get("message") == "no_instance"}
<div>
<h1>You have no instance selected for this frontend</h1>
- <Button on:click={autoPickInstance} disabled={autoPicking}>
+ <Button
+ on:click={async () => {
+ await autoPick()
+ await redirectUrl()
+ }}
+ disabled={autoPicking}
+ >
<AutoPickIcon class="margin margin_{document.body.dir}" />
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
</Button>
diff --git a/src/pages/options_src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte
index 4e5d1e7d..7a04b04e 100644
--- a/src/pages/options_src/Services/Instances.svelte
+++ b/src/pages/options_src/Services/Instances.svelte
@@ -56,30 +56,6 @@
return true
}
- async function pingInstances() {
- pingCache = {}
- for (const instance of allInstances) {
- pingCache[instance] = { color: "lightblue", value: "pinging..." }
- const time = await utils.ping(instance)
- pingCache[instance] = colorTime(time)
- }
- }
-
- async function autoPickInstance() {
- const instances = utils.randomInstances(redirects[selectedFrontend]["clearnet"], 5)
- const myInstancesCache = []
- for (const instance of instances) {
- pingCache[instance] = { color: "lightblue", value: "pinging..." }
- const time = await utils.ping(instance)
- pingCache[instance] = colorTime(time)
- myInstancesCache.push([instance, time])
- }
- myInstancesCache.sort((a, b) => a[1] - b[1])
-
- _options[selectedFrontend].push(myInstancesCache[0][0])
- options.set(_options)
- }
-
function colorTime(time) {
let value
let color
@@ -113,17 +89,46 @@
options.set(_options)
}
}
+
+ let autoPicking = false
+ let pinging = false
</script>
{#if serviceConf.frontends[selectedFrontend].instanceList && redirects && blacklist}
<hr />
<div>
- <Button on:click={pingInstances}>
+ <Button
+ on:click={async () => {
+ pinging = true
+ pingCache = {}
+ for (const instance of allInstances) {
+ pingCache[instance] = { color: "lightblue", value: "pinging..." }
+ const time = await utils.ping(instance)
+ pingCache[instance] = colorTime(time)
+ }
+ pinging = false
+ }}
+ disabled={pinging}
+ >
<PingIcon class="margin margin_{document.body.dir}" />
{browser.i18n.getMessage("pingInstances") || "Ping Instances"}
</Button>
- <Button on:click={autoPickInstance}>
+ <Button
+ on:click={async () => {
+ autoPicking = true
+ const clearnet = redirects[selectedFrontend]["clearnet"]
+ for (const instance of _options[selectedFrontend]) {
+ const i = clearnet.indexOf(instance)
+ if (i >= 0) clearnet.splice(i, 1)
+ }
+ const instance = await utils.autoPickInstance(clearnet)
+ _options[selectedFrontend].push(instance)
+ options.set(_options)
+ autoPicking = false
+ }}
+ disabled={autoPicking}
+ >
<AutoPickIcon class="margin margin_{document.body.dir}" />
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
</Button>
diff --git a/src/pages/popup_src/Buttons.svelte b/src/pages/popup_src/Buttons.svelte
index 992ed8e2..2354fcac 100644
--- a/src/pages/popup_src/Buttons.svelte
+++ b/src/pages/popup_src/Buttons.svelte
@@ -17,7 +17,6 @@
let _options
let _config
- let autoPicking = false
const unsubscribeOptions = options.subscribe(val => (_options = val))
const unsubscribeConfig = config.subscribe(val => (_config = val))
@@ -30,7 +29,6 @@
let switchInstance
let redirectToOriginal
let redirect
- let currentService
let frontend
let service
browser.tabs.query({ active: true, currentWindow: true }, async tabs => {
@@ -39,57 +37,20 @@
servicesHelper.switchInstance(url).then(r => (switchInstance = r))
servicesHelper.reverse(url).then(r => (redirectToOriginal = r))
servicesHelper.redirectAsync(url, "main_frame", null, null, false, true).then(r => (redirect = r))
- servicesHelper.computeService(url).then(r => (currentService = r))
- const computed = servicesHelper.computeFrontend(url)
- if (computed) {
- ;({ service, frontend } = computed)
- }
+ servicesHelper.computeServiceFrontend(url).then(r => ({ service, frontend } = r))
}
})
- 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 })
- window.close()
- }
-
- async function autoPickInstance() {
+ let autoPicking = false
+ async function autoPick() {
autoPicking = true
const redirects = await utils.getList(_options)
const clearnet = redirects[frontend]["clearnet"]
- const i = clearnet.findIndex(instance => url.href.startsWith(instance))
- if (i >= 0) clearnet.splice(i, 1)
- const randomInstances = utils.randomInstances(clearnet, 5)
- const pings = await Promise.all([
- ...randomInstances.map(async instance => {
- return [instance, await utils.ping(instance)]
- }),
- ])
- pings.sort((a, b) => a[1] - b[1])
- _options[frontend].push(pings[0][0])
+ const instance = await utils.autoPickInstance(clearnet, url)
+ _options[frontend].push(instance)
options.set(_options)
autoPicking = false
}
-
- async function addAutoPickInstance() {
- await autoPickInstance()
- browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => {
- window.close()
- })
- }
-
- async function removeAndAutoPickInstance() {
- const i = _options[frontend].findIndex(instance => url.href.startsWith(instance))
- _options[frontend].splice(i, 1)
- options.set(_options)
- await autoPickInstance()
- browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => {
- window.close()
- })
- }
</script>
<div class={document.body.dir}>
@@ -125,7 +86,18 @@
<SwitchInstanceIcon />
</Row>
{/if}
- <Row class="interactive" on:click={removeInstance}>
+ <Row
+ class="interactive"
+ on:click={async () => {
+ 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 }, () => {
+ window.close()
+ })
+ }}
+ >
<Label class="margin">
{browser.i18n.getMessage("remove") || "Remove"}
+
@@ -134,7 +106,18 @@
<SwitchInstanceIcon />
</Row>
{:else}
- <Row class={"interactive " + (autoPicking ? "disabled" : "")} on:click={removeAndAutoPickInstance}>
+ <Row
+ class={"interactive " + (autoPicking ? "disabled" : "")}
+ on:click={async () => {
+ const i = _options[frontend].findIndex(instance => url.href.startsWith(instance))
+ _options[frontend].splice(i, 1)
+ options.set(_options)
+ await autoPick()
+ browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => {
+ window.close()
+ })
+ }}
+ >
<Label class="margin">
{browser.i18n.getMessage("remove") || "Remove"}
+
@@ -142,7 +125,15 @@
</Label>
<AutoPickIcon />
</Row>
- <Row class={"interactive " + (autoPicking ? "disabled" : "")} on:click={addAutoPickInstance}>
+ <Row
+ class={"interactive " + (autoPicking ? "disabled" : "")}
+ on:click={async () => {
+ await autoPick()
+ browser.tabs.update({ url: await servicesHelper.switchInstance(url, service) }, () => {
+ window.close()
+ })
+ }}
+ >
<Label class="margin">
{browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
</Label>
@@ -161,7 +152,9 @@
on:click={() => {
browser.tabs.query({ active: true, currentWindow: true }, tabs => {
browser.runtime.sendMessage({ message: "reverse", tabId: tabs[0].id }, () => {
- browser.tabs.update({ url: redirectToOriginal })
+ browser.tabs.update({ url: redirectToOriginal }, () => {
+ window.close()
+ })
})
})
}}
@@ -175,13 +168,13 @@
<hr />
{/if}
- {#if currentService}
- <Switch serviceKey={currentService} {url} />
+ {#if service}
+ <Switch serviceKey={service} {url} />
<hr />
{/if}
{#each _options.popupServices as serviceKey}
- {#if currentService !== serviceKey}
+ {#if service !== serviceKey}
<Switch {serviceKey} {url} />
{/if}
{/each}