From 010126567cca3a02073d71a29030ba86d96c195f Mon Sep 17 00:00:00 2001 From: 0neGal Date: Fri, 20 Dec 2024 19:03:41 +0100 Subject: added requests.check() and uses of it Very minimal uses of it, currently it simply checks every 30s and on startup whether a set of domains/endpoints we use work, and if all fail, then we assume something is wrong with the internet. --- src/app/js/request.js | 61 +++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 4 deletions(-) (limited to 'src/app/js') diff --git a/src/app/js/request.js b/src/app/js/request.js index b9b5081..a8d4dd3 100644 --- a/src/app/js/request.js +++ b/src/app/js/request.js @@ -1,18 +1,27 @@ const ipcRenderer = require("electron").ipcRenderer; +let sent_error_toast = false; + let update_status = () => { // if offline, show toast and offline icon if (! navigator.onLine) { - ipcRenderer.send("no-internet"); + if (! sent_error_toast) { + sent_error_toast = true; + ipcRenderer.send("no-internet"); + } + offline.classList.remove("hidden"); - } else { // remove offline icon - offline.classList.add("hidden"); + return; } + + // remove offline icon + offline.classList.add("hidden"); + sent_error_toast = false; } +update_status(); window.addEventListener("online", update_status); window.addEventListener("offline", update_status); -update_status(); // invokes `requests.get()` from `src/modules/requests.js` through the // main process, and returns the output @@ -20,8 +29,52 @@ let request = async (...args) => { return await ipcRenderer.invoke("request", ...args); } +// invokes `requests.check()` from `src/modules/requests.js` through the +// main process, and returns the output +request.check = async (...args) => { + return await ipcRenderer.invoke("request-check", ...args); +} + request.delete_cache = () => { ipcRenderer.send("delete-request-cache"); } +// checks a list of endpoints/domains we need to be functioning for a +// lot of the WAN functionality +let check_endpoints = async () => { + // if we're not online according to the navigator, it's highly + // unlikely the endpoints will succeed + if (! navigator.onLine) { + if (! sent_error_toast) { + sent_error_toast = true; + ipcRenderer.send("no-internet"); + } + + return offline.classList.remove("hidden"); + } + + // check endpoints + let status = await request.check([ + "https://github.com", + "https://northstar.tf", + "https://thunderstore.io" + ]) + + // if just 1 endpoint succeeded, we probably have internet + if (status.succeeded.length) { + sent_error_toast = false; + offline.classList.add("hidden"); + } else { // no endpoint succeeded! + if (! sent_error_toast) { + sent_error_toast = true; + ipcRenderer.send("no-internet"); + } + + offline.classList.remove("hidden"); + } +}; check_endpoints(); + +// check endpoints every 30 seconds +setInterval(check_endpoints, 30000); + module.exports = request; -- cgit v1.2.3