diff options
Diffstat (limited to 'server/src/ui/items.rs')
-rw-r--r-- | server/src/ui/items.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/server/src/ui/items.rs b/server/src/ui/items.rs new file mode 100644 index 0000000..c7d062d --- /dev/null +++ b/server/src/ui/items.rs @@ -0,0 +1,48 @@ +/* + 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 <metamuffin.org> +*/ +use super::error::MyError; +use crate::{api::AcceptJson, database::Database, locale::AcceptLanguage}; +use jellycommon::api::{ApiItemsResponse, NodeFilterSort}; +use jellyimport::is_importing; +use jellylogic::{items::all_items, session::Session}; +use jellyui::{ + items::ItemsPage, + render_page, + scaffold::{RenderInfo, SessionInfo}, +}; +use rocket::{get, response::content::RawHtml, serde::json::Json, Either, State}; + +#[get("/items?<page>&<filter..>")] +pub fn r_items( + session: Session, + db: &State<Database>, + aj: AcceptJson, + page: Option<usize>, + filter: NodeFilterSort, + lang: AcceptLanguage, +) -> Result<Either<RawHtml<String>, Json<ApiItemsResponse>>, MyError> { + let AcceptLanguage(lang) = lang; + + let r = all_items(db, &session, page, filter.clone())?; + + Ok(if *aj { + Either::Right(Json(r)) + } else { + Either::Left(RawHtml(render_page( + &ItemsPage { + lang: &lang, + r, + filter: &filter, + page: page.unwrap_or(0), + }, + RenderInfo { + importing: is_importing(), + session: Some(SessionInfo { user: session.user }), + }, + lang, + ))) + }) +} |