diff options
author | metamuffin <metamuffin@disroot.org> | 2023-09-29 20:56:36 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-09-29 20:56:36 +0200 |
commit | c62eb3a2fdaa80f472be6ecbfc2cbf2479d8d914 (patch) | |
tree | 7a32678b59c123ea6fbe6c01237aec5e3b143e87 /server/src/routes/ui | |
parent | 29b12a48bcfa3aa0f814f7b39a64868b6313c13d (diff) | |
download | jellything-c62eb3a2fdaa80f472be6ecbfc2cbf2479d8d914.tar jellything-c62eb3a2fdaa80f472be6ecbfc2cbf2479d8d914.tar.bz2 jellything-c62eb3a2fdaa80f472be6ecbfc2cbf2479d8d914.tar.zst |
move stream generation to new crate
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 }, |