diff options
author | metamuffin <metamuffin@disroot.org> | 2023-07-31 19:53:01 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-07-31 19:53:01 +0200 |
commit | aeafba7847e189313df3025e6d6f291999b57350 (patch) | |
tree | bf7affdca28208695648bc9b18856cbb7049d1e8 /server/src/routes/ui/player.rs | |
parent | 0c651f11920350a4aa96aa24f8fe15b28390aed2 (diff) | |
download | jellything-aeafba7847e189313df3025e6d6f291999b57350.tar jellything-aeafba7847e189313df3025e6d6f291999b57350.tar.bz2 jellything-aeafba7847e189313df3025e6d6f291999b57350.tar.zst |
update server to new schema
Diffstat (limited to 'server/src/routes/ui/player.rs')
-rw-r--r-- | server/src/routes/ui/player.rs | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/server/src/routes/ui/player.rs b/server/src/routes/ui/player.rs index d5cb685..0e87749 100644 --- a/server/src/routes/ui/player.rs +++ b/server/src/routes/ui/player.rs @@ -5,27 +5,24 @@ */ use super::{account::session::Session, layout::LayoutPage}; use crate::{ - library::{Item, Library}, + database::Database, routes::{ stream::stream_uri, ui::{ + assets::{rocket_uri_macro_r_item_assets, AssetRole}, error::MyResult, layout::DynLayoutPage, - node::{rocket_uri_macro_r_item_assets, AssetRole}, }, }, uri, }; -use jellycommon::SourceTrackKind; +use anyhow::anyhow; +use jellycommon::{Node, SourceTrackKind}; use markup::DynRender; use rocket::{get, FromForm, State}; -use std::{ - path::{Path, PathBuf}, - sync::Arc, -}; -pub fn player_uri(path: &Path) -> String { - format!("/player/{}", path.to_str().unwrap()) +pub fn player_uri(id: &str) -> String { + format!("/player/{}", id) } #[derive(FromForm, Default, Clone, Debug)] @@ -36,14 +33,14 @@ pub struct PlayerConfig { pub webm: bool, } -#[get("/player/<path..>?<conf..>", rank = 4)] +#[get("/player/<id>?<conf..>", rank = 4)] pub fn r_player( _sess: Session, - library: &State<Library>, - path: PathBuf, + db: &State<Database>, + id: String, conf: PlayerConfig, ) -> MyResult<DynLayoutPage<'_>> { - let item = library.nested_path(&path)?.get_item()?; + let item = db.node.get(&id)?.ok_or(anyhow!("node does not exist"))?; let tracks = None .into_iter() .chain(conf.v.into_iter()) @@ -51,27 +48,35 @@ pub fn r_player( .chain(conf.s.into_iter()) .collect::<Vec<_>>(); + let conf = player_conf(item.clone(), !tracks.is_empty())?; Ok(LayoutPage { - title: item.info.title.to_owned(), + title: item.public.title.to_owned(), class: Some("player"), content: markup::new! { @if tracks.is_empty() { - img.backdrop[src=uri!(r_item_assets(&item.lib_path, AssetRole::Backdrop)).to_string()]; + img.backdrop[src=uri!(r_item_assets(&id, AssetRole::Backdrop)).to_string()]; } else { - video[src=stream_uri(&item.lib_path, &tracks, true), controls]{} + video[src=stream_uri(&id, &tracks, true), controls]{} } - @player_conf(item.clone(), !tracks.is_empty()) + @conf }, show_back: true, ..Default::default() }) } -pub fn player_conf<'a>(item: Arc<Item>, playing: bool) -> DynRender<'a> { +pub fn player_conf<'a>(item: Node, playing: bool) -> anyhow::Result<DynRender<'a>> { let mut audio_tracks = vec![]; let mut video_tracks = vec![]; let mut sub_tracks = vec![]; - for (tid, track) in item.info.tracks.clone() { + let tracks = item + .public + .media + .clone() + .ok_or(anyhow!("node does not have media"))? + .tracks + .clone(); + for (tid, track) in tracks.into_iter().enumerate() { match &track.kind { SourceTrackKind::Audio { .. } => audio_tracks.push((tid, track)), SourceTrackKind::Video { .. } => video_tracks.push((tid, track)), @@ -79,9 +84,9 @@ pub fn player_conf<'a>(item: Arc<Item>, playing: bool) -> DynRender<'a> { } } - markup::new! { + Ok(markup::new! { form.playerconf[method = "GET", action = ""] { - h2 { "Select tracks for " @item.info.title } + h2 { "Select tracks for " @item.public.title } fieldset.video { legend { "Video" } @@ -115,5 +120,5 @@ pub fn player_conf<'a>(item: Arc<Item>, playing: bool) -> DynRender<'a> { input[type="submit", value=if playing { "Change tracks" } else { "Start playback" }]; } - } + }) } |