about summary refs log tree commit diff stats
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}