aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-01-29 22:34:57 +0100
committermetamuffin <metamuffin@disroot.org>2025-01-29 22:34:57 +0100
commit8099c51e56b6d253c05cac9c235f52027ad736fa (patch)
treed1b8d02ef332caa407ec8937fed56b6e5d5a5d3d /server
parentdb511d3fe50f05329615f718515fab1b80d9e06a (diff)
downloadjellything-8099c51e56b6d253c05cac9c235f52027ad736fa.tar
jellything-8099c51e56b6d253c05cac9c235f52027ad736fa.tar.bz2
jellything-8099c51e56b6d253c05cac9c235f52027ad736fa.tar.zst
individual immediate file import
Diffstat (limited to 'server')
-rw-r--r--server/src/routes/mod.rs6
-rw-r--r--server/src/routes/ui/admin/mod.rs69
-rw-r--r--server/src/routes/ui/node.rs4
3 files changed, 40 insertions, 39 deletions
diff --git a/server/src/routes/mod.rs b/server/src/routes/mod.rs
index 98bde38..93a5c88 100644
--- a/server/src/routes/mod.rs
+++ b/server/src/routes/mod.rs
@@ -29,10 +29,7 @@ use ui::{
settings::{r_account_settings, r_account_settings_post},
},
admin::{
- log::r_admin_log,
- r_admin_dashboard, r_admin_delete_cache, r_admin_invite, r_admin_remove_invite,
- r_admin_transcode_posters,
- user::{r_admin_remove_user, r_admin_user, r_admin_user_permission, r_admin_users},
+ log::r_admin_log, r_admin_dashboard, r_admin_delete_cache, r_admin_import, r_admin_invite, r_admin_remove_invite, r_admin_transcode_posters, user::{r_admin_remove_user, r_admin_user, r_admin_user_permission, r_admin_users}
},
assets::{r_asset, r_item_backdrop, r_item_poster, r_node_thumbnail, r_person_asset},
browser::r_all_items_filter,
@@ -133,6 +130,7 @@ pub fn build_rocket(database: Database, federation: Federation) -> Rocket<Build>
r_admin_delete_cache,
r_admin_transcode_posters,
r_admin_log,
+ r_admin_import,
r_account_settings,
r_account_settings_post,
r_api_version,
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 {