From 3119d98bb6e12aa521e2e0ec5ecbb8cc0d90cfff Mon Sep 17 00:00:00 2001 From: larssand Date: Sat, 14 Mar 2026 19:46:18 +0100 Subject: [PATCH] add fix for predict --- server.js | 29 ++++++++++++++++++++++++++++- src/app.js | 4 ++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/server.js b/server.js index 88338d5..e08873a 100644 --- a/server.js +++ b/server.js @@ -156,7 +156,7 @@ app.post("/api/state", (req, res) => { }); app.post("/api/passings", (req, res) => { - const { sessionId, passing } = req.body || {}; + const { sessionId, passing, sessionResult } = req.body || {}; if (!sessionId || !passing || typeof passing !== "object") { res.status(400).json({ error: "Expected { sessionId, passing }" }); return; @@ -196,6 +196,33 @@ app.post("/api/passings", (req, res) => { new Date().toISOString() ); + // Keep app_state hot for overlay clients that hydrate from backend instead of + // having their own direct decoder socket. + if (sessionResult && typeof sessionResult === "object") { + const nowIso = new Date().toISOString(); + const row = db.prepare("SELECT state_json FROM app_state WHERE id = 1").get(); + if (row?.state_json) { + try { + const parsed = JSON.parse(row.state_json); + if (!parsed.resultsBySession || typeof parsed.resultsBySession !== "object") { + parsed.resultsBySession = {}; + } + parsed.resultsBySession[String(sessionId)] = sessionResult; + db.prepare( + ` + INSERT INTO app_state (id, state_json, updated_at) + VALUES (1, ?, ?) + ON CONFLICT(id) DO UPDATE SET + state_json = excluded.state_json, + updated_at = excluded.updated_at + ` + ).run(JSON.stringify(parsed), nowIso); + } catch { + // leave app_state untouched if the stored JSON is invalid + } + } + } + res.json({ ok: true }); }); diff --git a/src/app.js b/src/app.js index ef125c0..9283a00 100644 --- a/src/app.js +++ b/src/app.js @@ -1551,7 +1551,7 @@ function startOverlaySync() { if (currentView === "overlay") { renderView(); } - }, 2000); + }, 800); } function startOverlayRotation() { @@ -6123,7 +6123,7 @@ async function persistPassingToBackend(sessionId, passing) { const res = await fetch(`${getBackendUrl()}/api/passings`, { method: "POST", headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ sessionId, passing }), + body: JSON.stringify({ sessionId, passing, sessionResult: state.resultsBySession[sessionId] || null }), }); if (!res.ok) { throw new Error(`HTTP ${res.status}`);