aboutsummaryrefslogtreecommitdiff
path: root/scripts/complete_from_files.ts
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-18 12:45:12 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-18 12:45:12 +0200
commit0669d3871297abae36f0456e0d0042bf861afce8 (patch)
treed5bfaeb96020ca0611595b629d444cbdbca45b42 /scripts/complete_from_files.ts
parent4271431d21840f5b84bb238babc8e80fca638d2a (diff)
downloadisda-0669d3871297abae36f0456e0d0042bf861afce8.tar
isda-0669d3871297abae36f0456e0d0042bf861afce8.tar.bz2
isda-0669d3871297abae36f0456e0d0042bf861afce8.tar.zst
complete tasks from files
Diffstat (limited to 'scripts/complete_from_files.ts')
-rw-r--r--scripts/complete_from_files.ts36
1 files changed, 36 insertions, 0 deletions
diff --git a/scripts/complete_from_files.ts b/scripts/complete_from_files.ts
new file mode 100644
index 0000000..6aec7a2
--- /dev/null
+++ b/scripts/complete_from_files.ts
@@ -0,0 +1,36 @@
+
+const ws = new WebSocket(Deno.args[0])
+const root = Deno.args[1]
+
+async function traverse(path: string) {
+ console.log(`> ${path}`);
+ for await (const e of Deno.readDir(path)) {
+ if (e.isDirectory) await traverse(path + "/" + e.name)
+ else if (e.isFile) mark_complete(e.name)
+ }
+}
+
+let counter = 0;
+function mark_complete(name: string) {
+ // TODO other platforms
+ const r = /([A-Za-z0-9-_]{11})\.mkv/g.exec(name)
+ if (!r) return
+ const id = r[1]
+ counter += 1
+ ws.send(JSON.stringify({ t: "complete", key: `youtube:${id}`, force: true }))
+}
+
+ws.onerror = () => console.error("ws error")
+ws.onclose = () => console.error("ws closed")
+ws.onopen = async () => {
+ console.log("ws open");
+ ws.send(JSON.stringify({ t: "register", name: "complete from files", task_kinds: [] }))
+ await traverse(root)
+ console.log(`done, ${counter} tasks marked as complete`);
+ setTimeout(() => Deno.exit(0), 200) // not sure if websockets are flushed since they're instant
+}
+ws.onmessage = ev => {
+ if (typeof ev.data != "string") return
+ const p = JSON.parse(ev.data)
+ if (p.t == "error") console.error(`error: ${p.message}`);
+}