42 lines
1.1 KiB
JavaScript
42 lines
1.1 KiB
JavaScript
(() => {
|
|
const scheduleUrl = "/api/desktop/schedule-shutdown";
|
|
const cancelUrl = "/api/desktop/cancel-shutdown";
|
|
const registerUrl = "/api/desktop/register-session";
|
|
|
|
let sessionRegistered = false;
|
|
|
|
const post = (url) => {
|
|
if (typeof navigator.sendBeacon === "function") {
|
|
navigator.sendBeacon(url, "");
|
|
return;
|
|
}
|
|
|
|
fetch(url, { method: "POST", keepalive: true }).catch(() => { });
|
|
};
|
|
|
|
const registerSession = () => {
|
|
fetch(registerUrl, { method: "POST", keepalive: true })
|
|
.then((response) => {
|
|
if (response.ok) {
|
|
sessionRegistered = true;
|
|
post(cancelUrl);
|
|
}
|
|
})
|
|
.catch(() => { });
|
|
};
|
|
|
|
if (document.readyState === "loading") {
|
|
document.addEventListener("DOMContentLoaded", registerSession, { once: true });
|
|
} else {
|
|
registerSession();
|
|
}
|
|
|
|
window.addEventListener("pagehide", (event) => {
|
|
if (event.persisted || !sessionRegistered) {
|
|
return;
|
|
}
|
|
|
|
post(scheduleUrl);
|
|
});
|
|
})();
|