From 4c69fa7e292a3896ef5f4daf1e6dea3c9bd0b446 Mon Sep 17 00:00:00 2001 From: BobIsMyManager Date: Mon, 1 Aug 2022 13:31:16 +0100 Subject: Latency threshold, LBRY/Odysee -> LBRY Closes https://github.com/libredirect/libredirect/pull/405 --- src/assets/images/imgur-icon.png | Bin 26675 -> 0 bytes src/assets/images/imgur.png | Bin 0 -> 26675 bytes src/assets/javascripts/general.js | 1 + src/assets/javascripts/utils.js | 63 ++++++++++++++++++++++++++++++-------- 4 files changed, 51 insertions(+), 13 deletions(-) delete mode 100644 src/assets/images/imgur-icon.png create mode 100644 src/assets/images/imgur.png (limited to 'src/assets') diff --git a/src/assets/images/imgur-icon.png b/src/assets/images/imgur-icon.png deleted file mode 100644 index c23a45b2..00000000 Binary files a/src/assets/images/imgur-icon.png and /dev/null differ diff --git a/src/assets/images/imgur.png b/src/assets/images/imgur.png new file mode 100644 index 00000000..c23a45b2 Binary files /dev/null and b/src/assets/images/imgur.png 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) -- cgit 1.4.1