about summary refs log tree commit diff stats
path: root/src/pages/options_src
diff options
context:
space:
mode:
Diffstat (limited to 'src/pages/options_src')
-rw-r--r--src/pages/options_src/Services/Instances.svelte37
1 files changed, 33 insertions, 4 deletions
diff --git a/src/pages/options_src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte
index 3b870c4b..32425b80 100644
--- a/src/pages/options_src/Services/Instances.svelte
+++ b/src/pages/options_src/Services/Instances.svelte
@@ -5,6 +5,7 @@
   import AddIcon from "../../icons/AddIcon.svelte"
   import { options, config } from "../stores"
   import PingIcon from "../../icons/PingIcon.svelte"
+  import AutoPickIcon from "../../icons/AutoPickIcon.svelte"
   import Row from "../../components/Row.svelte"
   import Input from "../../components/Input.svelte"
   import Label from "../../components/Label.svelte"
@@ -36,10 +37,9 @@
     allInstances = []
     if (_options[selectedFrontend]) allInstances.push(..._options[selectedFrontend])
     if (redirects && redirects[selectedFrontend]) {
-      for (const network in redirects[selectedFrontend]) {
-        allInstances.push(...redirects[selectedFrontend][network])
-      }
+      allInstances.push(...redirects[selectedFrontend]["clearnet"])
     }
+    allInstances = [...new Set(allInstances)]
   }
 
   let pingCache
@@ -64,6 +64,31 @@
       pingCache[instance] = colorTime(time)
     }
   }
+  function randomInstances(n) {
+    let instances = []
+    for (let i = 0; i < n; i++) {
+      instances.push(redirects[selectedFrontend]["clearnet"][Math.floor(Math.random() * allInstances.length)])
+    }
+    return instances
+  }
+
+  async function autoPickInstance() {
+    const instances = randomInstances(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(function (a, b) {
+      return a[1] - b[1]
+    })
+
+    _options[selectedFrontend].push(myInstancesCache[0][0])
+    options.set(_options)
+  }
+
   function colorTime(time) {
     let value
     let color
@@ -102,11 +127,15 @@
 {#if serviceConf.frontends[selectedFrontend].instanceList && redirects && blacklist}
   <hr />
 
-  <div class="ping">
+  <div>
     <Button on:click={pingInstances}>
       <PingIcon class="margin margin_{document.body.dir}" />
       {browser.i18n.getMessage("pingInstances") || "Ping Instances"}
     </Button>
+    <Button on:click={autoPickInstance}>
+      <AutoPickIcon class="margin margin_{document.body.dir}" />
+      {browser.i18n.getMessage("autoPickInstance") || "Auto Pick Instance"}
+    </Button>
   </div>
 
   <Row>