From 08e4ecbfb9fd4f8d926744756e8f9e188f6bebf4 Mon Sep 17 00:00:00 2001 From: Michael Reber Date: Wed, 21 Jan 2026 10:43:38 +0100 Subject: [PATCH] Fix race-condition where the websocket-connection is not recheked on page-reload --- pkg/web/static/js/header.js | 44 +++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/pkg/web/static/js/header.js b/pkg/web/static/js/header.js index ccfb82f..96a2f42 100644 --- a/pkg/web/static/js/header.js +++ b/pkg/web/static/js/header.js @@ -69,20 +69,46 @@ function initStatusIndicator() { updateStatusIndicator('connecting', 'Connecting...'); // Register callback with WebSocket manager when available - if (typeof wsManager !== 'undefined' && wsManager) { - wsManager.onStatusChange(function(state, text) { - updateStatusIndicator(state, text); - }); - } else { + function registerStatusCallback() { + if (typeof wsManager !== 'undefined' && wsManager) { + // Register callback for future status changes + wsManager.onStatusChange(function(state, text) { + updateStatusIndicator(state, text); + }); + + // Immediately update status based on current connection state + // This handles the case where connection was established before callback registration + var currentState = wsManager.getConnectionState(); + var currentText = 'Connecting...'; + + if (currentState === 'connected' && wsManager.isConnected) { + currentText = 'Connected'; + } else if (currentState === 'connecting') { + currentText = 'Connecting...'; + } else if (currentState === 'disconnected') { + currentText = 'Disconnected'; + } else if (currentState === 'disconnecting') { + currentText = 'Disconnecting...'; + } + + updateStatusIndicator(currentState, currentText); + return true; + } + return false; + } + + if (!registerStatusCallback()) { // Wait for WebSocket manager to be available var checkInterval = setInterval(function() { - if (typeof wsManager !== 'undefined' && wsManager) { - wsManager.onStatusChange(function(state, text) { - updateStatusIndicator(state, text); - }); + if (registerStatusCallback()) { clearInterval(checkInterval); } }, 100); + + // Stop checking after 5 seconds to avoid infinite loop + setTimeout(function() { + clearInterval(checkInterval); + }, 5000); } }