diff options
Diffstat (limited to 'server/src/routes/ui')
-rw-r--r-- | server/src/routes/ui/admin/mod.rs | 69 | ||||
-rw-r--r-- | server/src/routes/ui/node.rs | 4 |
2 files changed, 38 insertions, 35 deletions
diff --git a/server/src/routes/ui/admin/mod.rs b/server/src/routes/ui/admin/mod.rs index 160999b..2993be0 100644 --- a/server/src/routes/ui/admin/mod.rs +++ b/server/src/routes/ui/admin/mod.rs @@ -17,7 +17,8 @@ use crate::{ uri, }; use anyhow::{anyhow, Context}; -use jellybase::CONF; +use jellybase::{federation::Federation, CONF}; +use jellyimport::{import_wrap, is_importing, IMPORT_ERRORS}; use markup::DynRender; use rand::Rng; use rocket::{form::Form, get, post, FromForm, State}; @@ -40,7 +41,7 @@ pub async fn admin_dashboard<'a>( let invites = database.list_invites()?; let flash = flash.map(|f| f.map_err(|e| format!("{e:?}"))); - // let last_import_err = IMPORT_ERRORS.read().await.to_owned(); + let last_import_err = IMPORT_ERRORS.read().await.to_owned(); let database = database.to_owned(); Ok(LayoutPage { @@ -48,28 +49,28 @@ pub async fn admin_dashboard<'a>( content: markup::new! { h1 { "Admin Panel" } @FlashDisplay { flash: flash.clone() } - // @if !last_import_err.is_empty() { - // section.message.error { - // p.error {"The last import resulted in at least one error:"} - // ol { @for e in &last_import_err { - // li.error { pre.error { @e } } - // }} - // } - // } + @if !last_import_err.is_empty() { + section.message.error { + p.error {"The last import resulted in at least one error:"} + ol { @for e in &last_import_err { + li.error { pre.error { @e } } + }} + } + } ul { li{a[href=uri!(r_admin_log(true))] { "Server Log (Warnings only)" }} li{a[href=uri!(r_admin_log(false))] { "Server Log (Full) " }} } h2 { "Library" } - // @if is_importing() { - // section.message { p.warn { "An import is currently running." } } - // } + @if is_importing() { + section.message { p.warn { "An import is currently running." } } + } @if is_transcoding() { section.message { p.warn { "Currently transcoding posters." } } } - // form[method="POST", action=uri!(r_admin_import())] { - // input[type="submit", disabled=is_importing(), value="(Re-)Import Library"]; - // } + form[method="POST", action=uri!(r_admin_import())] { + input[type="submit", disabled=is_importing(), value="(Re-)Import Library"]; + } form[method="POST", action=uri!(r_admin_transcode_posters())] { input[type="submit", disabled=is_transcoding(), value="Transcode all posters with low resolution"]; } @@ -130,24 +131,24 @@ pub async fn r_admin_remove_invite( admin_dashboard(database, Some(Ok("Invite invalidated".into()))).await } -// #[post("/admin/import")] -// pub async fn r_admin_import( -// session: AdminSession, -// database: &State<DataAcid>, -// federation: &State<Federation>, -// ) -> MyResult<DynLayoutPage<'static>> { -// drop(session); -// let t = Instant::now(); -// let r = import(database, federation).await; -// admin_dashboard( -// database, -// Some( -// r.map_err(|e| e.into()) -// .map(|_| format!("Import successful; took {:?}", t.elapsed())), -// ), -// ) -// .await -// } +#[post("/admin/import")] +pub async fn r_admin_import( + session: AdminSession, + database: &State<Database>, + _federation: &State<Federation>, +) -> MyResult<DynLayoutPage<'static>> { + drop(session); + let t = Instant::now(); + let r = import_wrap((*database).clone()).await; + admin_dashboard( + database, + Some( + r.map_err(|e| e.into()) + .map(|_| format!("Import successful; took {:?}", t.elapsed())), + ), + ) + .await +} #[post("/admin/delete_cache")] pub async fn r_admin_delete_cache( diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index 5cc8a2f..3332483 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -298,6 +298,8 @@ pub fn aspect_class(kind: NodeKind) -> &'static str { pub fn format_duration(mut d: f64) -> String { let mut s = String::new(); + let sign = if d > 0. { "" } else { "-" }; + d = d.abs(); for (unit, k) in [("h", 60. * 60.), ("m", 60.), ("s", 1.)] { let mut h = 0; // TODO dont iterate like that. can be a simple rem and div @@ -309,7 +311,7 @@ pub fn format_duration(mut d: f64) -> String { s += &format!("{h}{unit}") } } - s + format!("{sign}{s}") } pub trait DatabaseNodeUserDataExt { |