From 846fe07c2d083fa1015a9ef55b440a83def6e8b8 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Wed, 14 Jun 2023 22:28:56 +0200 Subject: render series --- server/src/library.rs | 10 ++++++++-- server/src/routes/ui/node.rs | 33 +++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) (limited to 'server/src') diff --git a/server/src/library.rs b/server/src/library.rs index 77bb6e5..330f382 100644 --- a/server/src/library.rs +++ b/server/src/library.rs @@ -4,7 +4,7 @@ Copyright (C) 2023 metamuffin */ use anyhow::{anyhow, bail, Context, Ok}; -use jellycommon::{DirectoryInfo, ItemInfo, CommmonInfo}; +use jellycommon::{CommmonInfo, DirectoryInfo, ItemInfo}; use log::info; use std::{ ffi::OsStr, @@ -83,7 +83,7 @@ impl Node { Node::Directory(_) => bail!("not an item"), } } - pub fn commmon(&self) -> &CommmonInfo { + pub fn common(&self) -> &CommmonInfo { match self { Node::Directory(d) => &d.info.common, Node::Item(i) => &i.info.common, @@ -95,6 +95,12 @@ impl Node { Node::Item(i) => &i.identifier, } } + pub fn lib_path(&self) -> &PathBuf { + match self { + Node::Directory(d) => &d.lib_path, + Node::Item(i) => &i.lib_path, + } + } pub fn from_path( path: PathBuf, diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index b9e9871..0b53e6d 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -32,7 +32,7 @@ pub async fn r_library_node( .nested_path(&path) .context("retrieving library node")?; Ok(LayoutPage { - title: node.commmon().title.to_string(), + title: node.common().title.to_string(), show_back: node.get_item().is_ok(), content: markup::new! { @NodePage { node: &node } @@ -44,7 +44,10 @@ pub async fn r_library_node( markup::define! { NodePage<'a>(node: &'a Arc) { @match node.as_ref() { - Node::Directory(dir) => { @DirectoryPage { dir } } + Node::Directory(dir) => { @match dir.info.kind { + DirectoryKind::Series => { @SeriesPage { dir } } + _ => { @DirectoryPage { dir } } + } } Node::Item(item) => { @ItemPage { item } } } } @@ -113,6 +116,25 @@ markup::define! { } } } + SeriesPage<'a>(dir: &'a Arc) { + // TODO different image here + img.backdrop[src=uri!(r_item_assets(&dir.lib_path, AssetRole::Backdrop))]; + div.page.item { + div.banner { + img[src=uri!(r_item_assets(&dir.lib_path, AssetRole::Poster))]; + } + div.title { + h1 { @dir.info.title } + } + div.details { + h3 { @dir.info.tagline } + p { @dir.info.description } + } + ol { @for ep in &dir.children { + li { a[href=uri!(r_library_node(ep.lib_path()))] { @ep.common().title } } + } } + } + } } #[derive(FromFormField, UriDisplayQuery)] @@ -133,12 +155,11 @@ pub async fn r_item_assets( .context("retrieving library node")?; let path = match role { AssetRole::Backdrop => node - .get_item()? - .info + .common() .backdrop .clone() - .or_else(|| node.commmon().poster.clone()), - AssetRole::Poster => node.commmon().poster.clone(), + .or_else(|| node.common().poster.clone()), + AssetRole::Poster => node.common().poster.clone(), }; let path = if let Some(p) = path { library.root_path.join(p) -- cgit v1.2.3-70-g09d2