diff options
author | metamuffin <metamuffin@disroot.org> | 2025-02-05 23:10:15 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-02-05 23:10:15 +0100 |
commit | df36a85b54fd427cc0914320d29aa4f005e5aff7 (patch) | |
tree | 0702e87d55fe1a7b4d6913a35759e343f9923389 /server/src | |
parent | fea9d99cef52a8ba258f5c8a11af08ec3304613e (diff) | |
download | jellything-df36a85b54fd427cc0914320d29aa4f005e5aff7.tar jellything-df36a85b54fd427cc0914320d29aa4f005e5aff7.tar.bz2 jellything-df36a85b54fd427cc0914320d29aa4f005e5aff7.tar.zst |
trakt episode details
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/routes/ui/node.rs | 33 | ||||
-rw-r--r-- | server/src/routes/ui/sort.rs | 6 |
2 files changed, 33 insertions, 6 deletions
diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index 337d249..f8b448f 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -63,17 +63,20 @@ pub async fn r_library_node_filter<'a>( .into_iter() .map(|c| db.get_node_with_userdata(c, &session)) .collect::<anyhow::Result<Vec<_>>>()?; + children.retain(|(n, _)| n.visibility >= Visibility::Reduced); - let parents = node + let mut parents = node .parents .iter() .flat_map(|pid| db.get_node(*pid).transpose()) .collect::<Result<Vec<_>, _>>()?; + 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, @@ -115,6 +118,26 @@ markup::define! { } } } + NodeCardWide<'a>(node: &'a Node, udata: &'a NodeUserData) { + @let cls = format!("node card widecard poster {}", aspect_class(node.kind)); + div[class=cls] { + .poster { + 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(&node.slug, PlayerConfig::default()))] { "play_arrow" } + } + } + } + div.details { + a.title[href=uri!(r_library_node(&node.slug))] { @node.title } + @Props { node, udata, full: false } + span.overview { @node.description } + } + } + } NodePage<'a>(id: &'a str, node: &'a Node, udata: &'a NodeUserData, children: &'a [(Arc<Node>, NodeUserData)], parents: &'a [Arc<Node>], filter: &'a NodeFilterSort) { @if !matches!(node.kind, NodeKind::Collection) { img.backdrop[src=uri!(r_item_backdrop(id, Some(2048))), loading="lazy"]; @@ -218,15 +241,13 @@ markup::define! { } @match node.kind { NodeKind::Show | NodeKind::Series | NodeKind::Season => { - ol { @for (c, _) in children.iter() { - li { a[href=uri!(r_library_node(&c.slug))] { @c.title } } + ol { @for (node, udata) in children.iter() { + li { @NodeCardWide { node, udata } } }} } NodeKind::Collection | NodeKind::Channel | _ => { ul.children {@for (node, udata) in children.iter() { - @if node.visibility != Visibility::Hidden { - li { @NodeCard { node, udata } } - } + li { @NodeCard { node, udata } } }} } } diff --git a/server/src/routes/ui/sort.rs b/server/src/routes/ui/sort.rs index 36250a9..6bee2ef 100644 --- a/server/src/routes/ui/sort.rs +++ b/server/src/routes/ui/sort.rs @@ -45,6 +45,7 @@ form_enum!( enum SortProperty { ReleaseDate = "release_date", Title = "title", + Index = "index", Duration = "duration", RatingRottenTomatoes = "rating_rt", RatingMetacritic = "rating_mc", @@ -180,6 +181,11 @@ pub fn filter_and_sort_nodes( nodes.sort_by_key(|(n, _)| n.release_date.expect("asserted above")) } SortProperty::Title => nodes.sort_by(|(a, _), (b, _)| a.title.cmp(&b.title)), + SortProperty::Index => nodes.sort_by(|(a, _), (b, _)| { + a.index + .unwrap_or(usize::MAX) + .cmp(&b.index.unwrap_or(usize::MAX)) + }), SortProperty::RatingRottenTomatoes => nodes.sort_by_cached_key(|(n, _)| { SortAnyway(*n.ratings.get(&Rating::RottenTomatoes).unwrap_or(&0.)) }), |