Merge pull request #228 from naturallaw777/copilot/fix-reboot-overlay-stuck

[WIP] Fix reboot overlay getting stuck after system update
This commit is contained in:
Sovran_Systems
2026-04-13 17:55:44 -05:00
committed by GitHub

View File

@@ -163,21 +163,46 @@ function saveErrorReport() {
// ── Reboot ──────────────────────────────────────────────────────── // ── Reboot ────────────────────────────────────────────────────────
var _rebootStartTime = 0;
var _serverWentDown = false;
function doReboot() { function doReboot() {
if ($modal) $modal.classList.remove("open"); if ($modal) $modal.classList.remove("open");
if ($rebuildModal) $rebuildModal.classList.remove("open"); if ($rebuildModal) $rebuildModal.classList.remove("open");
stopUpdatePoll(); stopUpdatePoll();
stopRebuildPoll(); stopRebuildPoll();
if ($rebootOverlay) $rebootOverlay.classList.add("visible"); if ($rebootOverlay) $rebootOverlay.classList.add("visible");
_rebootStartTime = Date.now();
_serverWentDown = false;
fetch("/api/reboot", { method: "POST" }).catch(function() {}); fetch("/api/reboot", { method: "POST" }).catch(function() {});
setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL); // Wait 15 seconds before the first check — give the system time to actually shut down
setTimeout(waitForServerReboot, 15000);
} }
function waitForServerReboot() { function waitForServerReboot() {
fetch("/api/config", { cache: "no-store" }) var controller = new AbortController();
var timeoutId = setTimeout(function() { controller.abort(); }, REBOOT_CHECK_INTERVAL);
fetch("/api/config", { cache: "no-store", signal: controller.signal })
.then(function(res) { .then(function(res) {
if (res.ok) window.location.reload(); clearTimeout(timeoutId);
else setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL); if (res.ok && _serverWentDown) {
// Server is back after having been down — reboot is complete
window.location.reload();
} else if (res.ok && !_serverWentDown && (Date.now() - _rebootStartTime) < 30000) {
// Server still responding but hasn't gone down yet — keep waiting
setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL);
} else if (res.ok) {
// Been over 30 seconds and server is responding — just reload
window.location.reload();
} else {
_serverWentDown = true;
setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL);
}
}) })
.catch(function() { setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL); }); .catch(function() {
clearTimeout(timeoutId);
_serverWentDown = true;
setTimeout(waitForServerReboot, REBOOT_CHECK_INTERVAL);
});
} }