aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/ui')
-rw-r--r--server/src/routes/ui/player.rs40
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
},