4 Commits

4 changed files with 24 additions and 8 deletions

View File

@@ -107,8 +107,8 @@ export async function initDiagUI({ elements, toast }) {
const entries = await syncState(); const entries = await syncState();
render(entries); render(entries);
toast?.("Diagnostics refreshed (after retry)", "success"); toast?.("Diagnostics refreshed (after retry)", "success");
} catch { } catch (err2) {
// swallow toast?.(err2.error || "Diagnostics still failing", "error");
} }
} finally { } finally {
setBusy(false); setBusy(false);
@@ -126,6 +126,8 @@ export async function initDiagUI({ elements, toast }) {
} catch (e) { } catch (e) {
toast?.(e.error || "Failed to save diagnostics setting", "error"); toast?.(e.error || "Failed to save diagnostics setting", "error");
enableToggle.checked = !enableToggle.checked; enableToggle.checked = !enableToggle.checked;
setBusy(false);
return;
} finally { } finally {
setBusy(false); setBusy(false);
} }

View File

@@ -6,7 +6,7 @@ import { initServiceControls, renderServices } from "./services.js";
import { initSettings } from "./settings.js"; import { initSettings } from "./settings.js";
import { initUpdateSettings, isUpdatesDirty } from "./update-settings.js"; import { initUpdateSettings, isUpdatesDirty } from "./update-settings.js";
import { initReleaseUI } from "./releases.js?v=20251213h"; import { initReleaseUI } from "./releases.js?v=20251213h";
import { initDiagUI, logUi } from "./diaglog.js?v=20251213i"; import { initDiagUI, logUi } from "./diaglog.js?v=20251213j";
const servicesGrid = document.getElementById("servicesGrid"); const servicesGrid = document.getElementById("servicesGrid");
const heroStats = document.getElementById("heroStats"); const heroStats = document.getElementById("heroStats");
@@ -133,6 +133,7 @@ let toastDurationMs = 5000;
let toastSpeedMs = 300; let toastSpeedMs = 300;
let fontChoice = "redhat"; let fontChoice = "redhat";
let releaseUI = null; let releaseUI = null;
let lastStatusData = null;
function applyToastSettings() { function applyToastSettings() {
if (!toastContainer) return; if (!toastContainer) return;
@@ -318,6 +319,7 @@ function setUpdatesUI(enabled) {
async function loadStatus() { async function loadStatus() {
try { try {
const data = await getStatus(); const data = await getStatus();
lastStatusData = data;
renderStats(heroStats, data); renderStats(heroStats, data);
renderServices(servicesGrid, data.services, { openAddService }); renderServices(servicesGrid, data.services, { openAddService });
const updatesEnabled = const updatesEnabled =
@@ -358,8 +360,12 @@ async function loadStatus() {
releaseUI?.refreshStatus(); releaseUI?.refreshStatus();
} catch (e) { } catch (e) {
console.error(e); console.error(e);
logUi(`Status refresh failed: ${e?.message || e}`, "error");
if (!lastStatusData) {
renderStats(heroStats, placeholderStatus); renderStats(heroStats, placeholderStatus);
} }
setTimeout(loadStatus, 2000);
}
} }
function setTempFlag(tempC) { function setTempFlag(tempC) {

View File

@@ -64,6 +64,9 @@ export function initReleaseUI({ showToast, showBusy, hideBusy, confirmAction, lo
releaseLog.textContent = releaseLogLines.join("\n"); releaseLog.textContent = releaseLogLines.join("\n");
releaseLog.scrollTop = 0; // keep most recent in view releaseLog.scrollTop = 0; // keep most recent in view
} }
// Mirror into global diagnostics log (frontend side)
const lvl = msg.toLowerCase().startsWith("error") ? "error" : "info";
logUi(`Update: ${msg}`, lvl);
} }
function setReleaseChip(state) { function setReleaseChip(state) {
@@ -175,11 +178,16 @@ export function initReleaseUI({ showToast, showBusy, hideBusy, confirmAction, lo
pollReleaseStatus(); pollReleaseStatus();
} }
} catch (e) { } catch (e) {
// During an update/rollback the API may restart; retry quietly.
if (releaseBusyActive) {
setTimeout(() => loadReleaseStatus(true), 1000);
return;
}
console.error("Failed to load release status", e); console.error("Failed to load release status", e);
setReleaseChip({ status: "error", message: "Failed to load" }); setReleaseChip({ status: "error", message: "Failed to load" });
// surface via toast/log only; avoid inline red flashes // surface via toast/log only once
showToast("Failed to load release status", "error");
logRelease("Error: failed to load release status"); logRelease("Error: failed to load release status");
showToast("Failed to load release status", "error");
} }
} }

View File

@@ -777,7 +777,7 @@
</div> </div>
</div> </div>
<script type="module" src="assets/main.js?v=20251213i"></script> <script type="module" src="assets/main.js?v=20251213j"></script>
<div id="toastContainer" class="toast-container"></div> <div id="toastContainer" class="toast-container"></div>
</body> </body>
</html> </html>