import { Config, EnqueueTask } from "./config.ts"; const ws = new WebSocket(Deno.args[0]) let config: Config = {} as unknown as Config async function run_enqueue(eqt: EnqueueTask) { if (eqt.retry_failed) { ws.send(JSON.stringify({ t: "query", state: "complete", kind: eqt.kind, data: eqt.filter ? { failed: eqt.filter } : null, cookie: "for_enqueue" })) return } if (!eqt.list_file) throw new Error("need either list_file or retry_failed"); const file = await Deno.readTextFile(eqt.list_file) for (const line of file.split("\n")) { if (!line.trim().length) continue let [name, rest] = line.split("=", 2) let [id, flags_raw] = rest.split(";", 2) let flags = flags_raw.split(" ") if (eqt.filter && !flags.includes(eqt.filter)) continue name = name.trim() id = id.trim() for (const f of eqt.default_flags ?? []) if (!flags.includes(`-${f}`)) flags.push(f) flags = flags.filter(e => e.length && !e.startsWith("-") && e != eqt.filter) const key = `${eqt.kind}:${id}`; ws.send(JSON.stringify({ t: "metadata", key, data: { ...eqt.data, output: (eqt.data.output ?? ".") + "/" + name, title: name, flags, } })) ws.send(JSON.stringify({ t: "enqueue", key, ignore_complete: !(eqt.oneshot ?? false) })) } ws.send(JSON.stringify({ t: "save" })) console.log("done"); setTimeout(() => run_enqueue(eqt), eqt.interval * 1000) } let started = false; function start() { started = true for (const t of config.enqueue) run_enqueue(t) } ws.onerror = () => console.error("ws error") ws.onclose = () => { console.error("ws closed") Deno.exit(1) } ws.onopen = () => { console.log("ws open"); ws.send(JSON.stringify({ t: "register", name: "enqueuer", task_kinds: [] })) } ws.onmessage = ev => { if (typeof ev.data != "string") return const p = JSON.parse(ev.data) if (p.t == "config") { config = p.config if (!started) start() } if (p.t == "error") console.error(`error: ${p.message}`); if (p.t == "query_response" && p.cookie == "for_enqueue") { for (const key of p.keys) { ws.send(JSON.stringify({ t: "metadata", key, data: { failed: null } })) ws.send(JSON.stringify({ t: "enqueue", key, ignore_complete: true })) } ws.send(JSON.stringify({ t: "save" })) } }