feat: add WebSocket client for export progress
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user