about summary refs log tree commit diff stats
path: root/src/pages/options_src
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-01-29 17:19:04 +0100
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-01-29 17:19:04 +0100
commit0cfcd80f3a715a77821aa83e0c89245ec2f53eec (patch)
treeaec2aea5c24c15f287bc05e695b60d45a26e6dc8 /src/pages/options_src
parentchore(merge): Merge remote-tracking branch 'origin/master' (diff)
parentAdded Structables, and made it the default https://codeberg.org/LibRedirect/b... (diff)
downloadlibredirect-0cfcd80f3a715a77821aa83e0c89245ec2f53eec.zip
Merge remote-tracking branch 'origin/master'
Diffstat (limited to 'src/pages/options_src')
-rw-r--r--src/pages/options_src/General/SettingsButtons.svelte2
-rw-r--r--src/pages/options_src/Services/Instances.svelte93
-rw-r--r--src/pages/options_src/Services/Services.svelte32
3 files changed, 73 insertions, 54 deletions
diff --git a/src/pages/options_src/General/SettingsButtons.svelte b/src/pages/options_src/General/SettingsButtons.svelte
index 4be747fe..1b92ecbc 100644
--- a/src/pages/options_src/General/SettingsButtons.svelte
+++ b/src/pages/options_src/General/SettingsButtons.svelte
@@ -38,7 +38,7 @@
     const resultString = JSON.stringify(_options, null, "  ")
     const anchor = document.createElement("a")
     anchor.href = "data:application/json;base64," + btoa(resultString)
-    anchor.download = `libredirect-settings-v${_options.version}.json`
+    anchor.download = `libredirect-settings-v${_options.version}-${(new Date().toISOString().replace(':','-').slice(0,-5))}.json`
     anchor.click()
   }
 
diff --git a/src/pages/options_src/Services/Instances.svelte b/src/pages/options_src/Services/Instances.svelte
index 4e5d1e7d..b37c3904 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>
@@ -202,20 +207,34 @@
                     <span style="color:{pingCache[instance].color}">{pingCache[instance].value}</span>
                   {/if}
                 </span>
-                <button
-                  class="add"
-                  aria-label="Add instance"
-                  on:click={() => {
-                    if (_options[selectedFrontend]) {
-                      if (!_options[selectedFrontend].includes(instance)) {
+                {#if !_options[selectedFrontend].includes(instance)}
+                  <button
+                    class="add"
+                    aria-label="Add instance"
+                    on:click={() => {
+                      if (_options[selectedFrontend]) {
                         _options[selectedFrontend].push(instance)
                         options.set(_options)
                       }
-                    }
-                  }}
-                >
-                  <AddIcon />
-                </button>
+                    }}
+                  >
+                    <AddIcon />
+                  </button>
+                {:else}
+                  <button
+                    class="add"
+                    aria-label="Remove Instance"
+                    on:click={() => {
+                      const index = _options[selectedFrontend].indexOf(instance)
+                      if (index > -1) {
+                        _options[selectedFrontend].splice(index, 1)
+                        options.set(_options)
+                      }
+                    }}
+                  >
+                    <CloseIcon />
+                  </button>
+                {/if}
               </Row>
               <hr />
             {/each}
diff --git a/src/pages/options_src/Services/Services.svelte b/src/pages/options_src/Services/Services.svelte
index db2977f9..dcc826fa 100644
--- a/src/pages/options_src/Services/Services.svelte
+++ b/src/pages/options_src/Services/Services.svelte
@@ -94,23 +94,23 @@
     />
   </Row>
 
-  <div style={!serviceOptions.enabled && "pointer-events: none;opacity: 0.4;user-select: none;"}>
-    <Row>
-      <Label>{browser.i18n.getMessage("showInPopup") || "Show in popup"}</Label>
-      <Checkbox
-        checked={_options.popupServices.includes(selectedService)}
-        onChange={e => {
-          if (e.target.checked && !_options.popupServices.includes(selectedService)) {
-            _options.popupServices.push(selectedService)
-          } else if (_options.popupServices.includes(selectedService)) {
-            const index = _options.popupServices.indexOf(selectedService)
-            if (index !== -1) _options.popupServices.splice(index, 1)
-          }
-          options.set(_options)
-        }}
-      />
-    </Row>
+  <Row>
+    <Label>{browser.i18n.getMessage("showInPopup") || "Show in popup"}</Label>
+    <Checkbox
+      checked={_options.popupServices.includes(selectedService)}
+      onChange={e => {
+        if (e.target.checked && !_options.popupServices.includes(selectedService)) {
+          _options.popupServices.push(selectedService)
+        } else if (_options.popupServices.includes(selectedService)) {
+          const index = _options.popupServices.indexOf(selectedService)
+          if (index !== -1) _options.popupServices.splice(index, 1)
+        }
+        options.set(_options)
+      }}
+    />
+  </Row>
 
+  <div style={!serviceOptions.enabled && "pointer-events: none;opacity: 0.4;user-select: none;"}>
     <Row>
       <Label>
         <a href={frontendWebsite} style="text-decoration: underline;" target="_blank" rel="noopener noreferrer">