Add server unzipping (#3622)

* Initial unzipping feature

* Remove explicit backup provider naming from frontend

* CF placeholder

* Use regex for CF links

* Lint

* Add unzip warning for conflicting files, fix hydration error

* Adjust conflict modal ui

* Fix old queued ops sticking around, remove conflict warning

* Add vscode "editor.detectIndentation": true
This commit is contained in:
Prospector
2025-05-07 19:08:38 -07:00
committed by GitHub
parent 1884410e0d
commit 16766be82f
23 changed files with 1042 additions and 255 deletions
@@ -787,6 +787,40 @@ const handleWebSocketMessage = (data: WSEvent) => {
break;
}
case "filesystem-ops": {
if (!server.fs) {
console.error("FilesystemOps received, but server.fs is not available", data.all);
break;
}
if (JSON.stringify(server.fs.ops) !== JSON.stringify(data.all)) {
server.fs.ops = data.all;
}
server.fs.queuedOps = server.fs.queuedOps.filter(
(queuedOp) => !data.all.some((x) => x.src === queuedOp.src),
);
const cancelled = data.all.filter((x) => x.state === "cancelled");
Promise.all(cancelled.map((x) => server.fs?.modifyOp(x.id, "dismiss")));
const completed = data.all.filter((x) => x.state === "done");
if (completed.length > 0) {
setTimeout(
async () =>
await Promise.all(
completed.map((x) => {
if (!server.fs?.opsQueuedForModification.includes(x.id)) {
server.fs?.opsQueuedForModification.push(x.id);
return server.fs?.modifyOp(x.id, "dismiss");
}
return Promise.resolve();
}),
),
3000,
);
}
break;
}
default:
console.warn("Unhandled WebSocket event:", data);
}