diff options
Diffstat (limited to 'server/src/routes/ui')
-rw-r--r-- | server/src/routes/ui/player.rs | 40 |
1 files changed, 24 insertions, 16 deletions
diff --git a/server/src/routes/ui/player.rs b/server/src/routes/ui/player.rs index 005e513..fa9657f 100644 --- a/server/src/routes/ui/player.rs +++ b/server/src/routes/ui/player.rs @@ -17,15 +17,18 @@ use crate::{ uri, }; use anyhow::anyhow; -use jellycommon::{Node, SourceTrackKind}; +use jellycommon::{ + stream::{StreamFormat, StreamSpec}, + Node, SourceTrackKind, TrackID, +}; use markup::DynRender; use rocket::{get, FromForm, State, UriDisplayQuery}; #[derive(FromForm, Default, Clone, Debug, UriDisplayQuery)] pub struct PlayerConfig { - pub a: Option<u64>, - pub v: Option<u64>, - pub s: Option<u64>, + pub a: Option<TrackID>, + pub v: Option<TrackID>, + pub s: Option<TrackID>, pub webm: bool, } @@ -37,24 +40,29 @@ pub fn r_player( conf: PlayerConfig, ) -> MyResult<DynLayoutPage<'_>> { let item = db.node.get(&id)?.ok_or(anyhow!("node does not exist"))?; - let tracks = None - .into_iter() - .chain(conf.v.into_iter()) - .chain(conf.a.into_iter()) - .chain(conf.s.into_iter()) - .map(|e| format!("{e}")) - .collect::<Vec<_>>() - .join(","); - let conf = player_conf(item.clone(), !tracks.is_empty())?; + let spec = StreamSpec { + tracks: None + .into_iter() + .chain(conf.v.into_iter()) + .chain(conf.a.into_iter()) + .chain(conf.s.into_iter()) + .collect::<Vec<_>>(), + format: StreamFormat::Webm, + ..Default::default() + }; + + let playing = !spec.tracks.is_empty(); + + let conf = player_conf(item.clone(), playing)?; Ok(LayoutPage { title: item.public.title.to_owned(), class: Some("player"), content: markup::new! { - @if tracks.is_empty() { - img.backdrop[src=uri!(r_item_assets(&id, AssetRole::Backdrop, Some(2048))).to_string()]; + @if playing { + video[src=uri!(r_stream(&id, &spec)), controls, preload="auto"]{} } else { - video[src=uri!(r_stream(&id, &tracks, Some(true))), controls, preload="auto"]{} + img.backdrop[src=uri!(r_item_assets(&id, AssetRole::Backdrop, Some(2048))).to_string()]; } @conf }, |