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          },  |