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