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
161
js/index.js
161
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,50 +362,64 @@ async function testHostConnection() {
|
|||
var url = document.getElementById("host").value + "/startup-events";
|
||||
// Attempt normal request
|
||||
try {
|
||||
// Check if API is available
|
||||
const response = await fetch(
|
||||
document.getElementById("host").value + "/sdapi/v1/options"
|
||||
);
|
||||
const optionsdata = await response.json();
|
||||
if (optionsdata["use_scale_latent_for_hires_fix"]) {
|
||||
const message = `You are using an outdated version of A1111 webUI.\nThe HRfix options will not work until you update to at least commit ef27a18 or newer.\n(https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/ef27a18b6b7cb1a8eebdc9b2e88d25baf2c2414d)\nHRfix will fallback to half-resolution only.`;
|
||||
console.warn(message);
|
||||
if (notify) alert(message);
|
||||
// Hide all new hrfix options
|
||||
document
|
||||
.querySelectorAll(".hrfix")
|
||||
.forEach((el) => (el.style.display = "none"));
|
||||
|
||||
// We are using old HRFix
|
||||
global.isOldHRFix = true;
|
||||
stableDiffusionData.enable_hr = false;
|
||||
}
|
||||
switch (response.status) {
|
||||
case 200: {
|
||||
setConnectionStatus("online");
|
||||
// Load data as soon as connection is first stablished
|
||||
if (firstTimeOnline) {
|
||||
getConfig();
|
||||
getStyles();
|
||||
getSamplers();
|
||||
getUpscalers();
|
||||
getModels();
|
||||
firstTimeOnline = false;
|
||||
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();
|
||||
}
|
||||
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);
|
||||
} else {
|
||||
// Check if API is available
|
||||
const response = await fetch(
|
||||
document.getElementById("host").value + "/sdapi/v1/options"
|
||||
);
|
||||
const optionsdata = await response.json();
|
||||
if (optionsdata["use_scale_latent_for_hires_fix"]) {
|
||||
const message = `You are using an outdated version of A1111 webUI.\nThe HRfix options will not work until you update to at least commit ef27a18 or newer.\n(https://github.com/AUTOMATIC1111/stable-diffusion-webui/commit/ef27a18b6b7cb1a8eebdc9b2e88d25baf2c2414d)\nHRfix will fallback to half-resolution only.`;
|
||||
console.warn(message);
|
||||
if (notify) alert(message);
|
||||
break;
|
||||
// Hide all new hrfix options
|
||||
document
|
||||
.querySelectorAll(".hrfix")
|
||||
.forEach((el) => (el.style.display = "none"));
|
||||
|
||||
// We are using old HRFix
|
||||
global.isOldHRFix = true;
|
||||
stableDiffusionData.enable_hr = false;
|
||||
}
|
||||
default: {
|
||||
setConnectionStatus("offline");
|
||||
const message = `The connection with the host returned an error: ${response.status} - ${response.statusText}`;
|
||||
console.error(message);
|
||||
if (notify) alert(message);
|
||||
switch (response.status) {
|
||||
case 200: {
|
||||
setConnectionStatus("online");
|
||||
// Load data as soon as connection is first stablished
|
||||
if (firstTimeOnline) {
|
||||
getConfig();
|
||||
getStyles();
|
||||
getSamplers();
|
||||
getUpscalers();
|
||||
getModels();
|
||||
firstTimeOnline = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 404: {
|
||||
apiIssueResult();
|
||||
break;
|
||||
}
|
||||
default: {
|
||||
offlineResult();
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
|
@ -413,7 +445,9 @@ async function testHostConnection() {
|
|||
return status;
|
||||
};
|
||||
|
||||
await checkConnection(!urlParams.has("noprompt"));
|
||||
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 = () => {
|
||||
setTimeout(
|
||||
async () => {
|
||||
await checkConnection();
|
||||
if (focused) {
|
||||
setTimeout(
|
||||
async () => {
|
||||
let simple = !firstTimeOnline;
|
||||
await checkConnection(false, simple);
|
||||
checkFocus();
|
||||
checkAgain();
|
||||
},
|
||||
connectionStatus ? 60000 : 5000
|
||||
//connectionStatus ? 5000 : 5000 //TODO REMOVE DEBUG REPLACE TO 60000 : 5000
|
||||
);
|
||||
} else {
|
||||
setTimeout(() => {
|
||||
console.debug("unfocused, zzz");
|
||||
checkFocus();
|
||||
checkAgain();
|
||||
},
|
||||
connectionStatus ? 30000 : 5000
|
||||
);
|
||||
}, 60000);
|
||||
//}, 5000); //TODO REMOVE DEBUG REPLACE TO 60000
|
||||
}
|
||||
};
|
||||
|
||||
checkAgain();
|
||||
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