/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ pub mod log; pub mod user; use super::error::MyResult; use crate::helper::{language::AcceptLanguage, A}; use jellycommon::routes::u_admin_dashboard; use jellyimport::is_importing; use jellylogic::{ admin::{ create_invite, delete_invite, do_import, get_import_errors, list_invites, update_search_index, }, session::AdminSession, }; use jellyui::{ admin::AdminDashboardPage, render_page, scaffold::{RenderInfo, SessionInfo}, }; use rocket::{ form::Form, get, post, response::{content::RawHtml, Redirect}, FromForm, }; #[get("/admin/dashboard")] pub async fn r_admin_dashboard( session: A, lang: AcceptLanguage, ) -> MyResult> { let AcceptLanguage(lang) = lang; let flash = None; let invites = list_invites(&session.0)?; let last_import_err = get_import_errors(&session.0).await; let busy = if is_importing() { Some("An import is currently running.") } else { None }; Ok(RawHtml(render_page( &AdminDashboardPage { busy, last_import_err: &last_import_err, invites: &invites, flash, lang: &lang, }, RenderInfo { importing: is_importing(), session: Some(SessionInfo { user: session.0 .0.user, }), }, lang, ))) } #[post("/admin/generate_invite")] pub async fn r_admin_invite(session: A) -> MyResult { let _ = create_invite(&session.0)?; Ok(Redirect::temporary(u_admin_dashboard())) } #[derive(FromForm)] pub struct DeleteInvite { invite: String, } #[post("/admin/remove_invite", data = "
")] pub async fn r_admin_remove_invite( session: A, form: Form, ) -> MyResult { delete_invite(&session.0, &form.invite)?; Ok(Redirect::temporary(u_admin_dashboard())) } #[post("/admin/import?")] pub async fn r_admin_import(session: A, incremental: bool) -> MyResult { do_import(&session.0, incremental).await?.1?; Ok(Redirect::temporary(u_admin_dashboard())) } #[post("/admin/update_search")] pub async fn r_admin_update_search(session: A) -> MyResult { update_search_index(&session.0).await?; Ok(Redirect::temporary(u_admin_dashboard())) }