From db511d3fe50f05329615f718515fab1b80d9e06a Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 29 Jan 2025 18:03:06 +0100 Subject: no direct redb access --- server/src/routes/ui/node.rs | 62 +++++++++++++++++--------------------------- 1 file changed, 24 insertions(+), 38 deletions(-) (limited to 'server/src/routes/ui/node.rs') 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, + db: &'a State, aj: AcceptJson, filter: NodeFilterSort, ) -> MyResult, Json>> { - 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, 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, 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, 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(), )) } -- cgit v1.2.3-70-g09d2