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) { 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() flags = flags.filter(e => e.length && 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}`); }