checks tab focus before doing XHR background stuff, replaces connectivity check endpoint for a lighter response

This commit is contained in:
tim h 2023-01-07 14:06:37 -06:00
parent dbcd588e29
commit 548eefe769

View file

@ -143,6 +143,7 @@ var stableDiffusionData = {
var host = ""; var host = "";
var url = "/sdapi/v1/"; var url = "/sdapi/v1/";
const basePixelCount = 64; //64 px - ALWAYS 64 PX const basePixelCount = 64; //64 px - ALWAYS 64 PX
var focused = true;
function startup() { function startup() {
testHostConfiguration(); testHostConfiguration();
@ -168,6 +169,7 @@ function startup() {
changeHiResSquare(); changeHiResSquare();
changeRestoreFaces(); changeRestoreFaces();
changeSyncCursorSize(); changeSyncCursorSize();
checkFocus();
} }
function setFixedHost(h, changePromptMessage) { function setFixedHost(h, changePromptMessage) {
@ -335,7 +337,23 @@ async function testHostConnection() {
let checkInProgress = false; 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) if (checkInProgress)
throw new CheckInProgressError( throw new CheckInProgressError(
"Check is currently in progress, please try again" "Check is currently in progress, please try again"
@ -344,50 +362,64 @@ async function testHostConnection() {
var url = document.getElementById("host").value + "/startup-events"; var url = document.getElementById("host").value + "/startup-events";
// Attempt normal request // Attempt normal request
try { try {
// Check if API is available if (simpleProgressStatus) {
const response = await fetch( const response = await fetch(
document.getElementById("host").value + "/sdapi/v1/options" document.getElementById("host").value + "/sdapi/v1/progress" // seems to be the "lightest" endpoint?
); );
const optionsdata = await response.json(); const responseData = await response.json();
if (optionsdata["use_scale_latent_for_hires_fix"]) { switch (response.status) {
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.`; case 200: {
console.warn(message); setConnectionStatus("online");
if (notify) alert(message); break;
// Hide all new hrfix options }
document case 404: {
.querySelectorAll(".hrfix") apiIssueResult();
.forEach((el) => (el.style.display = "none")); break;
}
// We are using old HRFix default: {
global.isOldHRFix = true; offlineResult();
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;
} }
break;
} }
case 404: { } else {
setConnectionStatus("apiissue"); // Check if API is available
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?`; const response = await fetch(
console.error(message); 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); 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: { switch (response.status) {
setConnectionStatus("offline"); case 200: {
const message = `The connection with the host returned an error: ${response.status} - ${response.statusText}`; setConnectionStatus("online");
console.error(message); // Load data as soon as connection is first stablished
if (notify) alert(message); if (firstTimeOnline) {
getConfig();
getStyles();
getSamplers();
getUpscalers();
getModels();
firstTimeOnline = false;
}
break;
}
case 404: {
apiIssueResult();
break;
}
default: {
offlineResult();
}
} }
} }
} catch (e) { } catch (e) {
@ -413,7 +445,9 @@ async function testHostConnection() {
return status; return status;
}; };
await checkConnection(!urlParams.has("noprompt")); if (focused) {
await checkConnection(!urlParams.has("noprompt"));
}
// On click, attempt to refresh // On click, attempt to refresh
connectionIndicator.onclick = async () => { 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 = () => { const checkAgain = () => {
setTimeout( if (focused) {
async () => { setTimeout(
await checkConnection(); 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(); checkAgain();
}, }, 60000);
connectionStatus ? 30000 : 5000 //}, 5000); //TODO REMOVE DEBUG REPLACE TO 60000
); }
}; };
checkAgain(); if (focused) {
checkAgain();
}
return () => { return () => {
checkConnection().catch(() => {}); checkConnection().catch(() => {});
@ -1242,3 +1290,16 @@ function resetToDefaults() {
localStorage.clear(); 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
}