From a5c102dbf16f72b4d97abec9790393862d6a51f2 Mon Sep 17 00:00:00 2001 From: jamesread Date: Mon, 9 Mar 2026 00:27:53 +0000 Subject: [PATCH] fix: Much more helpful reconnection banner --- frontend/js/websocket.js | 15 ++-- frontend/resources/vue/App.vue | 18 +---- .../vue/components/ConnectionBanner.vue | 68 +++++++++++++++++++ .../resources/vue/stores/connectionState.js | 4 +- lang/combined_output.json | 10 +++ lang/de-DE.yaml | 2 + lang/en.yaml | 2 + lang/es-ES.yaml | 2 + lang/it-IT.yaml | 2 + lang/zh-Hans-CN.yaml | 2 + 10 files changed, 104 insertions(+), 21 deletions(-) create mode 100644 frontend/resources/vue/components/ConnectionBanner.vue diff --git a/frontend/js/websocket.js b/frontend/js/websocket.js index dbabe67..d453a70 100644 --- a/frontend/js/websocket.js +++ b/frontend/js/websocket.js @@ -2,7 +2,7 @@ import { buttonResults } from '../resources/vue/stores/buttonResults.js' import { rateLimits } from '../resources/vue/stores/rateLimits.js' import { connectionState } from '../resources/vue/stores/connectionState.js' -const RECONNECT_DELAY_MS = 3000 +const RECONNECT_DELAY_MS = 10000 export function initWebsocket () { window.addEventListener('EventOutputChunk', onOutputChunk) @@ -21,12 +21,17 @@ async function reconnectWebsocket () { connectionState.reconnecting = true connectionState.connected = false + connectionState.disconnectedAt = Date.now() + connectionState.nextReconnectAt = null try { window.websocketAvailable = true - for await (const e of window.client.eventStream()) { - connectionState.connected = true - connectionState.reconnecting = false + const stream = window.client.eventStream() + connectionState.connected = true + connectionState.reconnecting = false + connectionState.disconnectedAt = null + connectionState.nextReconnectAt = null + for await (const e of stream) { handleEvent(e) } } catch (err) { @@ -35,6 +40,8 @@ async function reconnectWebsocket () { window.websocketAvailable = false connectionState.connected = false + connectionState.disconnectedAt = connectionState.disconnectedAt ?? Date.now() + connectionState.nextReconnectAt = Date.now() + RECONNECT_DELAY_MS console.log('Reconnecting websocket in ' + RECONNECT_DELAY_MS + 'ms...') setTimeout(() => { reconnectWebsocket() diff --git a/frontend/resources/vue/App.vue b/frontend/resources/vue/App.vue index 82830d7..dccdaa0 100644 --- a/frontend/resources/vue/App.vue +++ b/frontend/resources/vue/App.vue @@ -7,6 +7,7 @@