checks tab focus before doing XHR background stuff, replaces connectivity check endpoint for a lighter response
This commit is contained in:
parent
dbcd588e29
commit
548eefe769
1 changed files with 111 additions and 50 deletions
85
js/index.js
85
js/index.js
|
@ -143,6 +143,7 @@ var stableDiffusionData = {
|
|||
var host = "";
|
||||
var url = "/sdapi/v1/";
|
||||
const basePixelCount = 64; //64 px - ALWAYS 64 PX
|
||||
var focused = true;
|
||||
|
||||
function startup() {
|
||||
testHostConfiguration();
|
||||
|
@ -168,6 +169,7 @@ function startup() {
|
|||
changeHiResSquare();
|
||||
changeRestoreFaces();
|
||||
changeSyncCursorSize();
|
||||
checkFocus();
|
||||
}
|
||||
|
||||
function setFixedHost(h, changePromptMessage) {
|
||||
|
@ -335,7 +337,23 @@ async function testHostConnection() {
|
|||
|
||||
let checkInProgress = false;
|
||||
|
||||
const checkConnection = async (notify = false) => {
|
||||
const checkConnection = async (
|
||||
notify = false,
|
||||
simpleProgressStatus = false
|
||||
) => {
|
||||
const apiIssueResult = () => {
|
||||
setConnectionStatus("apiissue");
|
||||
const message = `The host is online, but the API seems to be disabled.\nHave you run the webui with the flag '--api', or is the flag '--gradio-debug' currently active?`;
|
||||
console.error(message);
|
||||
if (notify) alert(message);
|
||||
};
|
||||
|
||||
const offlineResult = () => {
|
||||
setConnectionStatus("offline");
|
||||
const message = `The connection with the host returned an error: ${response.status} - ${response.statusText}`;
|
||||
console.error(message);
|
||||
if (notify) alert(message);
|
||||
};
|
||||
if (checkInProgress)
|
||||
throw new CheckInProgressError(
|
||||
"Check is currently in progress, please try again"
|
||||
|
@ -344,6 +362,25 @@ async function testHostConnection() {
|
|||
var url = document.getElementById("host").value + "/startup-events";
|
||||
// Attempt normal request
|
||||
try {
|
||||
if (simpleProgressStatus) {
|
||||
const response = await fetch(
|
||||
document.getElementById("host").value + "/sdapi/v1/progress" // seems to be the "lightest" endpoint?
|
||||
);
|
||||
const responseData = await response.json();
|
||||
switch (response.status) {
|
||||
case 200: {
|
||||
setConnectionStatus("online");
|
||||
break;
|
||||
}
|
||||
case 404: {
|
||||
apiIssueResult();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
offlineResult();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Check if API is available
|
||||
const response = await fetch(
|
||||
document.getElementById("host").value + "/sdapi/v1/options"
|
||||
|
@ -377,17 +414,12 @@ async function testHostConnection() {
|
|||
break;
|
||||
}
|
||||
case 404: {
|
||||
setConnectionStatus("apiissue");
|
||||
const message = `The host is online, but the API seems to be disabled.\nHave you run the webui with the flag '--api', or is the flag '--gradio-debug' currently active?`;
|
||||
console.error(message);
|
||||
if (notify) alert(message);
|
||||
apiIssueResult();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
setConnectionStatus("offline");
|
||||
const message = `The connection with the host returned an error: ${response.status} - ${response.statusText}`;
|
||||
console.error(message);
|
||||
if (notify) alert(message);
|
||||
offlineResult();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -413,7 +445,9 @@ async function testHostConnection() {
|
|||
return status;
|
||||
};
|
||||
|
||||
if (focused) {
|
||||
await checkConnection(!urlParams.has("noprompt"));
|
||||
}
|
||||
|
||||
// On click, attempt to refresh
|
||||
connectionIndicator.onclick = async () => {
|
||||
|
@ -425,18 +459,32 @@ async function testHostConnection() {
|
|||
}
|
||||
};
|
||||
|
||||
// Checks every 5 seconds if offline, 30 seconds if online
|
||||
// Checks every 5 seconds if offline, 60 seconds if online
|
||||
const checkAgain = () => {
|
||||
if (focused) {
|
||||
setTimeout(
|
||||
async () => {
|
||||
await checkConnection();
|
||||
let simple = !firstTimeOnline;
|
||||
await checkConnection(false, simple);
|
||||
checkFocus();
|
||||
checkAgain();
|
||||
},
|
||||
connectionStatus ? 30000 : 5000
|
||||
connectionStatus ? 60000 : 5000
|
||||
//connectionStatus ? 5000 : 5000 //TODO REMOVE DEBUG REPLACE TO 60000 : 5000
|
||||
);
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
console.debug("unfocused, zzz");
|
||||
checkFocus();
|
||||
checkAgain();
|
||||
}, 60000);
|
||||
//}, 5000); //TODO REMOVE DEBUG REPLACE TO 60000
|
||||
}
|
||||
};
|
||||
|
||||
if (focused) {
|
||||
checkAgain();
|
||||
}
|
||||
|
||||
return () => {
|
||||
checkConnection().catch(() => {});
|
||||
|
@ -1242,3 +1290,16 @@ function resetToDefaults() {
|
|||
localStorage.clear();
|
||||
}
|
||||
}
|
||||
|
||||
document.addEventListener("visibilitychange", () => {
|
||||
checkFocus();
|
||||
});
|
||||
|
||||
function checkFocus() {
|
||||
if (!document.hidden) {
|
||||
focused = true;
|
||||
} else {
|
||||
focused = false;
|
||||
}
|
||||
console.debug("FOCUSED: " + focused); //TODO comment out or something
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue