aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-04-10 19:14:11 +0200
committermetamuffin <metamuffin@disroot.org>2024-04-10 19:14:49 +0200
commit3e3064b7b8adc1354ba833a0903cc59d2ef6d83f (patch)
treecd3394d47f886e5cc5ffbb4f8b647227c25e6c68
parent50ae5ec326dbb034b325e73ffcc032b1167ddd9c (diff)
downloadjellything-3e3064b7b8adc1354ba833a0903cc59d2ef6d83f.tar
jellything-3e3064b7b8adc1354ba833a0903cc59d2ef6d83f.tar.bz2
jellything-3e3064b7b8adc1354ba833a0903cc59d2ef6d83f.tar.zst
add subtitles
-rw-r--r--common/src/lib.rs5
-rw-r--r--import/src/lib.rs31
-rw-r--r--server/src/routes/ui/node.rs4
3 files changed, 32 insertions, 8 deletions
diff --git a/common/src/lib.rs b/common/src/lib.rs
index 27ca24a..d06c40c 100644
--- a/common/src/lib.rs
+++ b/common/src/lib.rs
@@ -44,12 +44,13 @@ pub struct NodePublic {
#[serde(default)] pub poster: Option<Asset>,
#[serde(default)] pub backdrop: Option<Asset>,
-
+
#[serde(default)] pub title: Option<String>,
+ #[serde(default)] pub subtitle: Option<String>,
#[serde(default)] pub id: Option<String>,
#[serde(default)] pub path: Vec<String>,
- #[serde(default)] pub children: Vec<String>,
#[serde(default)] pub tagline: Option<String>,
+ #[serde(default)] pub children: Vec<String>,
#[serde(default)] pub description: Option<String>,
#[serde(default)] pub release_date: Option<i64>, // in unix millis
#[serde(default)] pub index: Option<usize>,
diff --git a/import/src/lib.rs b/import/src/lib.rs
index 33caa77..274b63d 100644
--- a/import/src/lib.rs
+++ b/import/src/lib.rs
@@ -21,6 +21,7 @@ use jellybase::{
};
use jellyclient::Session;
use jellycommon::{
+ chrono::{Datelike, NaiveDateTime},
Asset, ExtendedNode, ImportOptions, ImportSource, MediaInfo, Node, NodeKind, NodePrivate,
NodePublic, PeopleGroup, Rating, SourceTrack, TmdbKind, TrackSource, TraktKind,
};
@@ -143,7 +144,12 @@ pub fn merge_nodes(db: &DataAcid) -> anyhow::Result<()> {
}
pub fn generate_node_paths(db: &DataAcid) -> anyhow::Result<()> {
- fn traverse(db: &DataAcid, c: String, mut path: Vec<String>) -> anyhow::Result<()> {
+ fn traverse(
+ db: &DataAcid,
+ c: String,
+ mut path: Vec<String>,
+ parent_title: &str,
+ ) -> anyhow::Result<()> {
let node = {
let txn = db.inner.begin_write()?;
let mut table = txn.open_table(T_NODE)?;
@@ -159,6 +165,22 @@ pub fn generate_node_paths(db: &DataAcid) -> anyhow::Result<()> {
if node.public.path.is_empty() {
node.public.path = path.clone();
}
+ node.public.subtitle = match node.public.kind.unwrap_or_default() {
+ NodeKind::Movie => node.public.release_date.map(|date| {
+ format!(
+ "{}",
+ NaiveDateTime::from_timestamp_millis(date)
+ .unwrap()
+ .date()
+ .year()
+ )
+ }),
+ NodeKind::Season
+ | NodeKind::Episode
+ | NodeKind::ShortFormVideo
+ | NodeKind::Video => Some(parent_title.to_string()),
+ _ => None,
+ };
table.insert(c.as_str(), Ser(node.clone()))?;
@@ -168,12 +190,13 @@ pub fn generate_node_paths(db: &DataAcid) -> anyhow::Result<()> {
};
path.push(c);
+ let ps = node.public.title.unwrap_or_default();
for c in node.public.children {
- traverse(db, c, path.clone())?;
+ traverse(db, c, path.clone(), &ps)?;
}
Ok(())
}
- traverse(db, "library".to_string(), vec![])?;
+ traverse(db, "library".to_string(), vec![], "Root")?;
Ok(())
}
@@ -653,9 +676,9 @@ fn merge_node(x: Node, y: Node) -> anyhow::Result<Node> {
public: NodePublic {
kind: x.public.kind.or(y.public.kind),
title: x.public.title.or(y.public.title),
+ subtitle: x.public.subtitle.or(y.public.subtitle),
id: x.public.id.or(y.public.id),
path: vec![],
-
children: merge_children(x.public.children, y.public.children),
tagline: x.public.tagline.or(y.public.tagline),
description: x.public.description.or(y.public.description),
diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs
index 9cc59c8..327add0 100644
--- a/server/src/routes/ui/node.rs
+++ b/server/src/routes/ui/node.rs
@@ -140,8 +140,8 @@ markup::define! {
}
}
div.subtitle {
- a[href=uri!(r_library_node(id))] {
- "Platzhalter"
+ span {
+ @node.subtitle
}
}
}