aboutsummaryrefslogtreecommitdiff
path: root/server/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-06-14 22:28:56 +0200
committermetamuffin <metamuffin@disroot.org>2023-06-14 22:28:56 +0200
commit846fe07c2d083fa1015a9ef55b440a83def6e8b8 (patch)
tree53efe0aeb68d78cc4a52697089c4d903ef8ff41d /server/src
parent50be406bbf448d93a2c669419b494797cdde675e (diff)
downloadjellything-846fe07c2d083fa1015a9ef55b440a83def6e8b8.tar
jellything-846fe07c2d083fa1015a9ef55b440a83def6e8b8.tar.bz2
jellything-846fe07c2d083fa1015a9ef55b440a83def6e8b8.tar.zst
render series
Diffstat (limited to 'server/src')
-rw-r--r--server/src/library.rs10
-rw-r--r--server/src/routes/ui/node.rs33
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)