diff --git a/client/src/lib/ws.ts b/client/src/lib/ws.ts new file mode 100644 index 0000000..a143650 --- /dev/null +++ b/client/src/lib/ws.ts @@ -0,0 +1,38 @@ +import { getServer } from "./api"; +import { exportStatus, exportCompleted } from "./stores"; + +let socket: WebSocket | null = null; + +export function connectExportWs() { + const wsUrl = getServer().replace(/^http/, "ws") + "/ws/export"; + socket = new WebSocket(wsUrl); + + socket.onmessage = (event) => { + const msg = JSON.parse(event.data); + switch (msg.type) { + case "clip_done": + exportCompleted.update(n => n + 1); + break; + case "all_done": + exportStatus.set("done"); + break; + case "error": + exportStatus.set("error"); + console.error("Export error:", msg.msg); + break; + } + }; + + socket.onclose = () => { + // Reconnect after 2s + setTimeout(connectExportWs, 2000); + }; +} + +export function disconnectExportWs() { + if (socket) { + socket.onclose = null; // prevent reconnect + socket.close(); + socket = null; + } +}