diff options
author | metamuffin <metamuffin@disroot.org> | 2025-01-29 18:03:06 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-01-29 18:03:06 +0100 |
commit | db511d3fe50f05329615f718515fab1b80d9e06a (patch) | |
tree | 7969fea01be100cbe4385ad13a14940a987ac513 /server/src/routes/ui/node.rs | |
parent | 82e8a55a1496ae9132e13e7286fe1c0d57d586d3 (diff) | |
download | jellything-db511d3fe50f05329615f718515fab1b80d9e06a.tar jellything-db511d3fe50f05329615f718515fab1b80d9e06a.tar.bz2 jellything-db511d3fe50f05329615f718515fab1b80d9e06a.tar.zst |
no direct redb access
Diffstat (limited to 'server/src/routes/ui/node.rs')
-rw-r--r-- | server/src/routes/ui/node.rs | 62 |
1 files changed, 24 insertions, 38 deletions
diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index 3307d50..5cc8a2f 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -1,3 +1,5 @@ +use std::sync::Arc; + /* 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. @@ -12,7 +14,7 @@ use super::{ sort::{filter_and_sort_nodes, NodeFilterSort, NodeFilterSortForm, SortOrder, SortProperty}, }; use crate::{ - database::DataAcid, + database::Database, routes::{ api::AcceptJson, ui::{ @@ -30,13 +32,9 @@ use crate::{ }; use anyhow::{anyhow, Result}; use chrono::DateTime; -use jellybase::{ - database::{TableExt, T_NODE, T_USER_NODE}, - permission::NodePermissionExt, -}; use jellycommon::{ user::{NodeUserData, WatchedState}, - Chapter, MediaInfo, Node, NodeKind, PeopleGroup, Rating, SourceTrackKind, + Chapter, MediaInfo, Node, NodeID, NodeKind, PeopleGroup, Rating, SourceTrackKind, }; use rocket::{get, serde::json::Json, Either, State}; @@ -50,21 +48,14 @@ pub fn r_library_node(id: String) { pub async fn r_library_node_filter<'a>( session: Session, id: &'a str, - db: &'a State<DataAcid>, + db: &'a State<Database>, aj: AcceptJson, filter: NodeFilterSort, ) -> MyResult<Either<DynLayoutPage<'a>, Json<Node>>> { - let node = T_NODE - .get(db, id)? - .only_if_permitted(&session.user.permissions) - .ok_or(anyhow!("node does not exist"))?; - - let udata = T_USER_NODE - .get(db, &(session.user.name.as_str(), id))? - .unwrap_or_default(); + let (node, udata) = db.get_node_with_userdata(NodeID::from_slug(id), &session)?; if *aj { - return Ok(Either::Right(Json(node))); + return Ok(Either::Right(Json((*node).clone()))); } // let mut children = node @@ -111,22 +102,22 @@ pub async fn r_library_node_filter<'a>( } markup::define! { - NodeCard<'a>(id: &'a str, node: &'a Node, udata: &'a NodeUserData) { + NodeCard<'a>(node: &'a Node, udata: &'a NodeUserData) { @let cls = format!("node card poster {}", aspect_class(node.kind.unwrap_or_default())); div[class=cls] { .poster { - a[href=uri!(r_library_node(id))] { - img[src=uri!(r_item_poster(id, Some(1024))), loading="lazy"]; + a[href=uri!(r_library_node(&node.slug))] { + img[src=uri!(r_item_poster(&node.slug, Some(1024))), loading="lazy"]; } .cardhover.item { @if node.media.is_some() { - a.play.icon[href=&uri!(r_player(id, PlayerConfig::default()))] { "play_arrow" } + a.play.icon[href=&uri!(r_player(&node.slug, PlayerConfig::default()))] { "play_arrow" } } @Props { node, udata, full: false } } } div.title { - a[href=uri!(r_library_node(id))] { + a[href=uri!(r_library_node(&node.slug))] { @node.title } } @@ -137,7 +128,7 @@ markup::define! { } } } - NodePage<'a>(id: &'a str, node: &'a Node, udata: &'a NodeUserData, children: &'a [(String, Node, NodeUserData)], path: &'a [(String, Node)], filter: &'a NodeFilterSort) { + NodePage<'a>(id: &'a str, node: &'a Node, udata: &'a NodeUserData, children: &'a [(Arc<Node>, NodeUserData)], path: &'a [(String, Node)], filter: &'a NodeFilterSort) { @if !matches!(node.kind.unwrap_or_default(), NodeKind::Collection) { img.backdrop[src=uri!(r_item_backdrop(id, Some(2048))), loading="lazy"]; } @@ -240,13 +231,13 @@ markup::define! { } @match node.kind.unwrap_or_default() { NodeKind::Show | NodeKind::Series | NodeKind::Season => { - ol { @for (id, c, _) in children.iter() { - li { a[href=uri!(r_library_node(id))] { @c.title } } + ol { @for (c, _) in children.iter() { + li { a[href=uri!(r_library_node(&c.slug))] { @c.title } } }} } NodeKind::Collection | NodeKind::Channel | _ => { - ul.children {@for (id, node, udata) in children.iter() { - li { @NodeCard { id, node, udata } } + ul.children {@for (node, udata) in children.iter() { + li { @NodeCard { node, udata } } }} } } @@ -324,24 +315,19 @@ pub fn format_duration(mut d: f64) -> String { pub trait DatabaseNodeUserDataExt { fn get_node_with_userdata( &self, - id: &str, + id: NodeID, session: &Session, - ) -> Result<(String, Node, NodeUserData)>; + ) -> Result<(Arc<Node>, NodeUserData)>; } -impl DatabaseNodeUserDataExt for DataAcid { +impl DatabaseNodeUserDataExt for Database { fn get_node_with_userdata( &self, - id: &str, + id: NodeID, session: &Session, - ) -> Result<(String, Node, NodeUserData)> { + ) -> Result<(Arc<Node>, NodeUserData)> { Ok(( - id.to_owned(), - T_NODE - .get(self, id)? - .only_if_permitted(&session.user.permissions) - .ok_or(anyhow!("node does not exist: {id}"))?, - T_USER_NODE - .get(self, &(session.user.name.as_str(), id))? + self.get_node(id)?.ok_or(anyhow!("node does not exist"))?, + self.get_node_udata(id, &session.user.name)? .unwrap_or_default(), )) } |