diff options
author | metamuffin <metamuffin@disroot.org> | 2025-04-29 11:10:21 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-04-29 11:10:21 +0200 |
commit | f62c7f2a8cc143454779dc99334ca9fc80ddabd5 (patch) | |
tree | f31dbb908715d2deb2860e2097fa13dd41d759d5 /server/src/ui/node.rs | |
parent | 73d2d5eb01fceae9e0b1c58afb648822000c878a (diff) | |
download | jellything-f62c7f2a8cc143454779dc99334ca9fc80ddabd5.tar jellything-f62c7f2a8cc143454779dc99334ca9fc80ddabd5.tar.bz2 jellything-f62c7f2a8cc143454779dc99334ca9fc80ddabd5.tar.zst |
still just moving code around
Diffstat (limited to 'server/src/ui/node.rs')
-rw-r--r-- | server/src/ui/node.rs | 106 |
1 files changed, 38 insertions, 68 deletions
diff --git a/server/src/ui/node.rs b/server/src/ui/node.rs index 5d0f1ff..1a0ff16 100644 --- a/server/src/ui/node.rs +++ b/server/src/ui/node.rs @@ -3,25 +3,23 @@ which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin <metamuffin.org> */ -use super::{error::MyResult, sort::filter_and_sort_nodes}; -use crate::{api::AcceptJson, database::Database, locale::AcceptLanguage, logic::session::Session}; -use anyhow::{anyhow, Result}; +use super::error::MyResult; +use crate::{api::AcceptJson, database::Database, locale::AcceptLanguage}; use jellycommon::{ - api::{ApiNodeResponse, NodeFilterSort, SortOrder, SortProperty}, - user::NodeUserData, - Node, NodeID, NodeKind, Visibility, + api::{ApiNodeResponse, NodeFilterSort}, + NodeID, }; -use rocket::{get, serde::json::Json, Either, State}; -use std::{cmp::Reverse, collections::BTreeMap, sync::Arc}; - -/// This function is a stub and only useful for use in the uri! macro. -#[get("/n/<id>")] -pub fn r_library_node(id: NodeID) { - let _ = id; -} +use jellyimport::is_importing; +use jellylogic::{node::get_node, session::Session}; +use jellyui::{ + node_page::NodePage, + render_page, + scaffold::{RenderInfo, SessionInfo}, +}; +use rocket::{get, response::content::RawHtml, serde::json::Json, Either, State}; #[get("/n/<id>?<parents>&<children>&<filter..>")] -pub async fn r_library_node_filter<'a>( +pub async fn r_node<'a>( session: Session, id: NodeID, db: &'a State<Database>, @@ -30,65 +28,37 @@ pub async fn r_library_node_filter<'a>( lang: AcceptLanguage, parents: bool, children: bool, -) -> MyResult<Either<DynLayoutPage<'a>, Json<ApiNodeResponse>>> { +) -> MyResult<Either<RawHtml<String>, Json<ApiNodeResponse>>> { let AcceptLanguage(lang) = lang; - let (node, udata) = db.get_node_with_userdata(id, &session)?; - let mut children = if !*aj || children { - db.get_node_children(id)? - .into_iter() - .map(|c| db.get_node_with_userdata(c, &session)) - .collect::<anyhow::Result<Vec<_>>>()? - } else { - Vec::new() - }; - - let mut parents = if !*aj || parents { - node.parents - .iter() - .map(|pid| db.get_node_with_userdata(*pid, &session)) - .collect::<anyhow::Result<Vec<_>>>()? - } else { - Vec::new() - }; - - let mut similar = get_similar_media(&node, db, &session)?; - - similar.retain(|(n, _)| n.visibility >= Visibility::Reduced); - children.retain(|(n, _)| n.visibility >= Visibility::Reduced); - parents.retain(|(n, _)| n.visibility >= Visibility::Reduced); - - filter_and_sort_nodes( - &filter, - match node.kind { - NodeKind::Channel => (SortProperty::ReleaseDate, SortOrder::Descending), - NodeKind::Season | NodeKind::Show => (SortProperty::Index, SortOrder::Ascending), - _ => (SortProperty::Title, SortOrder::Ascending), - }, - &mut children, - ); + let r = get_node( + &db, + id, + &session, + !*aj || children, + !*aj || parents, + filter.clone(), + )?; Ok(if *aj { - Either::Right(Json(ApiNodeResponse { - children, - parents, - node, - userdata: udata, - })) + Either::Right(Json(r)) } else { - Either::Left(LayoutPage { - title: node.title.clone().unwrap_or_default(), - content: markup::new!(@NodePage { - node: &node, - udata: &udata, - children: &children, - parents: &parents, + Either::Left(RawHtml(render_page( + &NodePage { + node: &r.node, + udata: &r.userdata, + children: &r.children, + parents: &r.parents, + similar: &[], filter: &filter, - player: false, - similar: &similar, lang: &lang, - }), - ..Default::default() - }) + player: false, + }, + RenderInfo { + importing: is_importing(), + session: Some(SessionInfo { user: session.user }), + }, + lang, + ))) }) } |