aboutsummaryrefslogtreecommitdiff
path: root/scripts/complete_from_files.ts
diff options
context:
space:
mode:
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}`);
+}