diff options
author | metamuffin <metamuffin@disroot.org> | 2023-06-14 22:28:56 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-06-14 22:28:56 +0200 |
commit | 846fe07c2d083fa1015a9ef55b440a83def6e8b8 (patch) | |
tree | 53efe0aeb68d78cc4a52697089c4d903ef8ff41d /server/src | |
parent | 50be406bbf448d93a2c669419b494797cdde675e (diff) | |
download | jellything-846fe07c2d083fa1015a9ef55b440a83def6e8b8.tar jellything-846fe07c2d083fa1015a9ef55b440a83def6e8b8.tar.bz2 jellything-846fe07c2d083fa1015a9ef55b440a83def6e8b8.tar.zst |
render series
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/library.rs | 10 | ||||
-rw-r--r-- | server/src/routes/ui/node.rs | 33 |
2 files changed, 35 insertions, 8 deletions
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 <metamuffin.org> */ 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<Node>) { @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<Directory>) { + // 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) |