aboutsummaryrefslogtreecommitdiff
path: root/src/webui_live.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/webui_live.js')
-rw-r--r--src/webui_live.js31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/webui_live.js b/src/webui_live.js
new file mode 100644
index 0000000..12b5fef
--- /dev/null
+++ b/src/webui_live.js
@@ -0,0 +1,31 @@
+/// <reference lib="dom" />
+
+const ws = new WebSocket("/webui_ws")
+ws.onopen = () => console.log("ws open");
+ws.onclose = () => console.warn("ws close");
+ws.onerror = () => console.warn("ws error");
+ws.onmessage = ev => {
+ const u = JSON.parse(ev.data)
+ if (u.t == "update_worker") {
+ const e = document.getElementById(`worker-${u.id}`)
+ if (e) e.outerHTML = u.html
+ else document.getElementById("workers").innerHTML += u.html
+ } else if (u.t == "remove_worker") {
+ document.getElementById(`worker-${u.id}`)?.remove()
+ } else if (u.t == "update_task") {
+ const e = document.getElementById(u.key)
+ const parent_id = u.bin == "queue" ? "bin-queue" : u.bin == "loading" ? "bin-loading" : "bin-complete"
+ const parent = document.querySelector(`#${parent_id} > ul`)
+ if (e && e.parentElement == parent) e.outerHTML = u.html
+ else {
+ e?.remove()
+ parent.innerHTML += u.html
+ }
+ } else if (u.t == "remove_task") {
+ document.getElementById(u.key)?.remove()
+ } else if (u.t == "counters") {
+ document.querySelector("#bin-queue .count").textContent = `${u.queue} tasks`
+ document.querySelector("#bin-loading .count").textContent = `${u.loading} tasks`
+ document.querySelector("#bin-complete .count").textContent = `${u.complete} tasks`
+ }
+}