From 0669d3871297abae36f0456e0d0042bf861afce8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 18 May 2025 12:45:12 +0200 Subject: complete tasks from files --- scripts/complete_from_files.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/complete_from_files.ts (limited to 'scripts/complete_from_files.ts') 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}`); +} -- cgit v1.2.3-70-g09d2