diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-19 22:13:22 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-19 22:13:22 +0200 |
commit | 5fb390fbf5862a9ec3bee8a21ca45fdffc18b455 (patch) | |
tree | d612fa7fc079ad5f5ccbedd1a579db18412e2623 | |
parent | 102bbf10a470a8617902cd5bf255be5762f335b9 (diff) | |
download | isda-5fb390fbf5862a9ec3bee8a21ca45fdffc18b455.tar isda-5fb390fbf5862a9ec3bee8a21ca45fdffc18b455.tar.bz2 isda-5fb390fbf5862a9ec3bee8a21ca45fdffc18b455.tar.zst |
show failed tasks red
-rw-r--r-- | src/style.css | 3 | ||||
-rw-r--r-- | src/webui.rs | 35 | ||||
-rw-r--r-- | src/webui_ws.rs | 9 |
3 files changed, 31 insertions, 16 deletions
diff --git a/src/style.css b/src/style.css index 4b30b32..7adc885 100644 --- a/src/style.css +++ b/src/style.css @@ -38,6 +38,9 @@ .task.complete { border-color: #6eff70; } +.task.complete-failed { + border-color: #ff6e6e; +} .worker { margin: 2px; diff --git a/src/webui.rs b/src/webui.rs index ca314c9..e292676 100644 --- a/src/webui.rs +++ b/src/webui.rs @@ -1,6 +1,7 @@ use crate::{ State, helper::{Css, Javascript}, + webui_ws::TaskState, }; use axum::extract::State as S; use axum::response::Html; @@ -46,9 +47,9 @@ pub(crate) async fn webui(S(state): S<Arc<RwLock<State>>>) -> Html<String> { }} } section.tasks { - @Taskbin { title: "Queued", state: "queue", set: &g.queue, default, g } - @Taskbin { title: "Loading", state: "loading", set: &g.loading, default, g } - @Taskbin { title: "Completed", state: "complete", set: &g.complete, default, g } + @Taskbin { title: "Queued", state: TaskState::Queue, set: &g.queue, default, g } + @Taskbin { title: "Loading", state: TaskState::Loading, set: &g.loading, default, g } + @Taskbin { title: "Completed", state: TaskState::Complete, set: &g.complete, default, g } } } } @@ -57,18 +58,17 @@ pub(crate) async fn webui(S(state): S<Arc<RwLock<State>>>) -> Html<String> { } markup::define!( - Taskbin<'a>(title: &'a str, state: &'a str, set: &'a HashSet<String>, g: &'a State, default: &'a Map<String, Value>) { - div[id=format!("bin-{state}")] { + Taskbin<'a>(title: &'a str, state: TaskState, set: &'a HashSet<String>, g: &'a State, default: &'a Map<String, Value>) { + div[id=taskbin_id(*state)] { h2 { @title } p.count { @set.len() " tasks" } - @let class = format!("task {state}"); ul { @for key in set.iter().take(128) { - li { @Task { key, data: g.metadata.get(key).unwrap_or(&default), class: &class } } + li { @Task { key, data: g.metadata.get(key).unwrap_or(&default), state: *state } } }} } } - Task<'a>(key: &'a str, data: &'a Map<String, Value>, class: &'a str) { - div[class=class, id=key, style=task_style(data)] { + Task<'a>(key: &'a str, data: &'a Map<String, Value>, state: TaskState) { + div[class=task_class(*state, data), id=key, style=task_style(data)] { // @if let Some(url) = data.get("thumbnail").and_then(Value::as_str) { // img[src=url, loading="lazy"]; // } @@ -103,6 +103,23 @@ fn task_style(data: &Map<String, Value>) -> Option<String> { .map(|p| format!("background-size: {:.02}%;", p * 100.)) } +fn taskbin_id(state: TaskState) -> &'static str { + match state { + TaskState::Queue => "bin-queue", + TaskState::Loading => "bin-loading", + TaskState::Complete => "bin-complete", + } +} +fn task_class(state: TaskState, data: &Map<String, Value>) -> &'static str { + match state { + TaskState::Queue => "task queue", + TaskState::Loading => "task loading", + TaskState::Complete if data.get("failed").and_then(Value::as_bool).unwrap_or(false) => { + "task complete-failed" + } + TaskState::Complete => "task complete", + } +} fn worker_class(w: &crate::Worker) -> &'static str { if w.accept > 0 { "worker accepting" diff --git a/src/webui_ws.rs b/src/webui_ws.rs index 6a19e22..6b5821e 100644 --- a/src/webui_ws.rs +++ b/src/webui_ws.rs @@ -37,7 +37,7 @@ pub enum WebuiEvent { }, } -#[derive(Debug, Serialize)] +#[derive(Debug, Serialize, Clone, Copy, PartialEq)] #[serde(rename_all = "snake_case")] pub enum TaskState { Queue, @@ -82,17 +82,12 @@ impl State { }; let default = Map::new(); - let class = match state { - TaskState::Queue => "task queue", - TaskState::Loading => "task loading", - TaskState::Complete => "task complete", - }; let data = self.metadata.get(key).unwrap_or(&default); let _ = self.webui_broadcast.send(Arc::new(WebuiEvent::UpdateTask { bin: state, key: key.to_owned(), - html: webui::Task { class, data, key }.to_string(), + html: webui::Task { state, data, key }.to_string(), })); let _ = self.webui_broadcast.send(Arc::new(WebuiEvent::Counters { queue: self.queue.len(), |