diff options
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/routes/ui/admin/mod.rs | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/server/src/routes/ui/admin/mod.rs b/server/src/routes/ui/admin/mod.rs index 463319a..5c2c48f 100644 --- a/server/src/routes/ui/admin/mod.rs +++ b/server/src/routes/ui/admin/mod.rs @@ -51,10 +51,12 @@ pub async fn admin_dashboard<'a>( @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 } } - }} + details { + summary { p.error { @format!("The last import resulted in {} errors:", last_import_err.len()) } } + ol { @for e in &last_import_err { + li.error { pre.error { @e } } + }} + } } } ul { @@ -68,12 +70,15 @@ pub async fn admin_dashboard<'a>( @if is_transcoding() { section.message { p.warn { "Currently transcoding posters." } } } - form[method="POST", action=uri!(r_admin_import(true))] { + form[method="POST", action=uri!(r_admin_import(true, false))] { input[type="submit", disabled=is_importing(), value="Start incremental import"]; } - form[method="POST", action=uri!(r_admin_import(false))] { + form[method="POST", action=uri!(r_admin_import(false, false))] { input[type="submit", disabled=is_importing(), value="Start full import"]; } + form[method="POST", action=uri!(r_admin_import(false, true))] { + input[type="submit", disabled=is_importing(), value="Clear all nodes"]; + } form[method="POST", action=uri!(r_admin_transcode_posters())] { input[type="submit", disabled=is_transcoding(), value="Transcode all posters with low resolution"]; } @@ -134,24 +139,25 @@ pub async fn r_admin_remove_invite( admin_dashboard(database, Some(Ok("Invite invalidated".into()))).await } -#[post("/admin/import?<incremental>")] +#[post("/admin/import?<incremental>&<nuke>")] pub async fn r_admin_import( session: AdminSession, database: &State<Database>, _federation: &State<Federation>, incremental: bool, + nuke: bool, ) -> MyResult<DynLayoutPage<'static>> { drop(session); let t = Instant::now(); - let r = import_wrap((*database).clone(), incremental).await; - admin_dashboard( - database, - Some( - r.map_err(|e| e.into()) - .map(|_| format!("Import successful; took {:?}", t.elapsed())), - ), - ) - .await + let flash = if nuke { + database.clear_nodes()?; + Ok(format!("All nodes cleared.")) + } else { + let r = import_wrap((*database).clone(), incremental).await; + r.map_err(|e| e.into()) + .map(|_| format!("Import successful; took {:?}", t.elapsed())) + }; + admin_dashboard(database, Some(flash)).await } #[post("/admin/delete_cache")] |