From f7c3eafb546ca6c8efeb0950537654f888ae8e95 Mon Sep 17 00:00:00 2001 From: Matiss Jurevics Date: Thu, 9 Apr 2026 15:40:00 +0100 Subject: [PATCH] fix(webapp): require realtime before requesting streams --- WebApp/src/lib/app/controller.js | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/WebApp/src/lib/app/controller.js b/WebApp/src/lib/app/controller.js index fddc748..b751985 100644 --- a/WebApp/src/lib/app/controller.js +++ b/WebApp/src/lib/app/controller.js @@ -1577,6 +1577,28 @@ const startSocketHeartbeat = () => { }, SOCKET_HEARTBEAT_INTERVAL_MS); }; +const ensureRealtimeConnection = async ({ timeoutMs = 4000 } = {}) => { + if (socket?.connected || getAppState().socketConnected) { + return true; + } + + if (!getAppState().deviceToken) { + return false; + } + + connectSocket(); + + const startedAt = Date.now(); + while (Date.now() - startedAt < timeoutMs) { + if (socket?.connected || getAppState().socketConnected) { + return true; + } + await sleep(100); + } + + return Boolean(socket?.connected || getAppState().socketConnected); +}; + const connectSocket = () => { const { deviceToken } = getAppState(); if (!deviceToken) return; @@ -2231,6 +2253,12 @@ const actions = { }, async requestStream(cameraDeviceId) { + const realtimeReady = await ensureRealtimeConnection(); + if (!realtimeReady) { + pushToast('Realtime connection unavailable. Reconnect and try again.', 'error'); + return; + } + try { requestedStreams.add(cameraDeviceId); await api.streams.request(cameraDeviceId);