aboutsummaryrefslogtreecommitdiffstats
path: root/src/assets
diff options
context:
space:
mode:
Diffstat (limited to 'src/assets')
-rw-r--r--src/assets/images/imgur.png (renamed from src/assets/images/imgur-icon.png)bin26675 -> 26675 bytes
-rw-r--r--src/assets/javascripts/general.js1
-rw-r--r--src/assets/javascripts/utils.js63
3 files changed, 51 insertions, 13 deletions
diff --git a/src/assets/images/imgur-icon.png b/src/assets/images/imgur.png
index c23a45b2..c23a45b2 100644
--- a/src/assets/images/imgur-icon.png
+++ b/src/assets/images/imgur.png
Binary files differ
diff --git a/src/assets/javascripts/general.js b/src/assets/javascripts/general.js
index 0b34c148..113dc6f7 100644
--- a/src/assets/javascripts/general.js
+++ b/src/assets/javascripts/general.js
@@ -32,6 +32,7 @@ async function initDefaults() {
firstPartyIsolate: false,
protocol: "normal",
protocolFallback: true,
+ latencyThreshold: 1000
},
() => resolve()
)
diff --git a/src/assets/javascripts/utils.js b/src/assets/javascripts/utils.js
index 9a7d37b3..52848de7 100644
--- a/src/assets/javascripts/utils.js
+++ b/src/assets/javascripts/utils.js
@@ -247,34 +247,65 @@ async function processDefaultCustomInstances(target, name, protocol, document) {
})
}
-async function ping(href) {
+function ping(href) {
return new Promise(async resolve => {
+ let average = 0
+ let time
+ for (let i = 0; i < 3; i++) {
+ time = await pingOnce(href)
+ if (i == 0) continue
+ if (time >= 5000) {
+ resolve(time)
+ return
+ }
+ average += time
+ }
+ average = parseInt(average / 3)
+ resolve(average)
+ })
+}
+
+function pingOnce(href) {
+ return new Promise(async resolve => {
+ let started
let http = new XMLHttpRequest()
- http.open("GET", `${href}?_=${new Date().getTime()}`, /*async*/ true)
http.timeout = 5000
- let started = new Date().getTime()
+ http.ontimeout = () => resolve(5000)
+ http.onerror = () => resolve()
http.onreadystatechange = () => {
if (http.readyState == 2) {
if (http.status == 200) {
let ended = new Date().getTime()
http.abort()
resolve(ended - started)
- } else resolve(5000 + http.status)
+ } else {
+ resolve(5000 + http.status)
+ }
}
+
}
- http.ontimeout = () => resolve(5000)
- http.onerror = () => resolve()
- try {
- http.send(null)
- } catch (exception) {
- resolve()
- }
+ http.open("GET", `${href}?_=${new Date().getTime()}`, true)
+ started = new Date().getTime()
+ http.send(null)
})
}
+
-async function testLatency(element, instances) {
+async function testLatency(element, instances, frontend) {
return new Promise(async resolve => {
let myList = {}
+ let latencyThreshold
+ let redirectsChecks = []
+ browser.storage.local.get(
+ [
+ "latencyThreshold",
+ `${frontend}NormalRedirectsChecks`
+ ],
+ r => {
+ latencyThreshold = r.latencyThreshold
+ redirectsChecks = r[`${frontend}NormalRedirectsChecks`]
+ }
+ )
for (const href of instances)
await ping(href).then(time => {
if (time) {
@@ -284,6 +315,12 @@ async function testLatency(element, instances) {
else if (time <= 2000) color = "orange"
else color = "red"
+ if (time > latencyThreshold) {
+ redirectsChecks.splice(redirectsChecks.indexOf(href), 1)
+ }
+
+ browser.storage.local.set({ [`${frontend}NormalRedirectsChecks`]: redirectsChecks })
+
let text
if (time == 5000) text = "5000ms+"
else if (time > 5000) text = `ERROR: ${time - 5000}`
@@ -487,7 +524,7 @@ function latency(name, frontend, document, location) {
let redirects = r[key]
const oldHtml = latencyLabel.innerHTML
latencyLabel.innerHTML = "..."
- testLatency(latencyLabel, redirects[frontend].normal).then(r => {
+ testLatency(latencyLabel, redirects[frontend].normal, frontend).then(r => {
browser.storage.local.set({ [`${frontend}Latency`]: r })
latencyLabel.innerHTML = oldHtml
processDefaultCustomInstances(name, frontend, "normal", document)