aboutsummaryrefslogtreecommitdiff
path: root/server/src/ui/items.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/ui/items.rs')
-rw-r--r--server/src/ui/items.rs48
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,
+ )))
+ })
+}