diff --git a/webterm/server.go b/webterm/server.go index 431b6d5..392b093 100644 --- a/webterm/server.go +++ b/webterm/server.go @@ -1486,9 +1486,24 @@ func (s *LocalServer) handleRoot(w http.ResponseWriter, r *http.Request) { return document.visibilityState === 'visible'; } + let dashboardHiddenAt = 0; + function onDashboardFocusChanged() { if (dashboardCanRequestScreenshots()) { - processRefreshQueue(); + // If the dashboard was hidden for more than a few seconds, + // clear ETags and refresh all tiles so the user sees current state. + const away = dashboardHiddenAt ? (Date.now() - dashboardHiddenAt) : 0; + dashboardHiddenAt = 0; + if (away > 3000) { + for (const key in etagBySlug) { + delete etagBySlug[key]; + } + refreshAll(); + } else { + processRefreshQueue(); + } + } else { + dashboardHiddenAt = Date.now(); } } @@ -1496,6 +1511,13 @@ func (s *LocalServer) handleRoot(w http.ResponseWriter, r *http.Request) { window.addEventListener('focus', onDashboardFocusChanged); window.addEventListener('blur', onDashboardFocusChanged); + // Periodic fallback: refresh all tiles every 10s in case SSE events were missed. + setInterval(() => { + if (dashboardCanRequestScreenshots()) { + refreshAll(); + } + }, 10000); + function processRefreshQueue() { if (refreshQueue.length === 0 || !dashboardCanRequestScreenshots()) return;