about summary refs log tree commit diff stats
path: root/src/assets/javascripts
diff options
context:
space:
mode:
authorBobIsMyManager <bimmgitsignature.nly8m@simplelogin.co>2022-08-01 13:31:16 +0100
committerBobIsMyManager <bimmgitsignature.nly8m@simplelogin.co>2022-08-01 13:31:16 +0100
commit4c69fa7e292a3896ef5f4daf1e6dea3c9bd0b446 (patch)
tree4e7df41cb5c94ac08368ef77c80d2272b873fd78 /src/assets/javascripts
parentMinor spelling mistake (diff)
downloadlibredirect-4c69fa7e292a3896ef5f4daf1e6dea3c9bd0b446.zip
Latency threshold, LBRY/Odysee -> LBRY
Closes https://github.com/libredirect/libredirect/pull/405
Diffstat (limited to 'src/assets/javascripts')
-rw-r--r--src/assets/javascripts/general.js1
-rw-r--r--src/assets/javascripts/utils.js63
2 files changed, 51 insertions, 13 deletions
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)