From bcf0f3526883af82f129d0ddb0de484ded80fc4d Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 5 Jun 2023 20:28:00 +0200 Subject: show player config in player itself --- server/src/routes/ui/account/mod.rs | 2 +- server/src/routes/ui/player.rs | 78 +++++++++++++++++------------------ server/src/routes/ui/style/player.css | 3 ++ 3 files changed, 41 insertions(+), 42 deletions(-) (limited to 'server/src') diff --git a/server/src/routes/ui/account/mod.rs b/server/src/routes/ui/account/mod.rs index b778b64..0e4e0cc 100644 --- a/server/src/routes/ui/account/mod.rs +++ b/server/src/routes/ui/account/mod.rs @@ -206,7 +206,7 @@ pub fn format_form_error(form: Form>) -> MyError { } MyError(anyhow!(k)) } - + pub fn hash_password(username: &str, password: &str) -> Vec { Argon2::default() .hash_password( diff --git a/server/src/routes/ui/player.rs b/server/src/routes/ui/player.rs index 050a164..5a995ce 100644 --- a/server/src/routes/ui/player.rs +++ b/server/src/routes/ui/player.rs @@ -12,6 +12,7 @@ use crate::{ }, }; use jellycommon::SourceTrackKind; +use markup::DynRender; use rocket::{get, FromForm, State}; use std::{ path::{Path, PathBuf}, @@ -38,10 +39,6 @@ pub fn r_player( conf: PlayerConfig, ) -> MyResult> { let item = library.nested_path(&path)?.get_item()?; - if conf.a.is_none() && conf.v.is_none() && conf.s.is_none() { - return player_conf(item); - } - let tracks = [] .into_iter() .chain(conf.v.into_iter()) @@ -53,12 +50,15 @@ pub fn r_player( title: item.info.title.to_owned(), class: Some("player"), content: markup::new! { - video[src=stream_uri(&item.lib_path, &tracks, true), controls]; + @if conf.a.is_some() || conf.v.is_some() || conf.s.is_some() { + video[src=stream_uri(&item.lib_path, &tracks, true), controls]{} + } + @player_conf(item.clone()) }, }) } -pub fn player_conf<'a>(item: Arc) -> MyResult> { +pub fn player_conf<'a>(item: Arc) -> DynRender<'a> { let mut audio_tracks = vec![]; let mut video_tracks = vec![]; let mut sub_tracks = vec![]; @@ -70,46 +70,42 @@ pub fn player_conf<'a>(item: Arc) -> MyResult> { } } - Ok(LayoutPage { - title: "Configure Player".to_string(), - content: markup::new! { - // img.backdrop[src=uri!(r_item_assets(&item.lib_path)).to_string()]; - form.playerconf[method = "GET", action = ""] { - h2 { "Select tracks for " @item.info.title } + markup::new! { + // img.backdrop[src=uri!(r_item_assets(&item.lib_path)).to_string()]; + form.playerconf[method = "GET", action = ""] { + h2 { "Select tracks for " @item.info.title } - fieldset.video { - legend { "Video" } - @for (i, (tid, track)) in video_tracks.iter().enumerate() { - input[type="radio", id=tid, name="v", value=tid, checked=i==0]; - label[for=tid] { @format!("{track}") } br; - } - input[type="radio", id="v-none", name="v", value=""]; - label[for="v-none"] { "No video" } + fieldset.video { + legend { "Video" } + @for (i, (tid, track)) in video_tracks.iter().enumerate() { + input[type="radio", id=tid, name="v", value=tid, checked=i==0]; + label[for=tid] { @format!("{track}") } br; } + input[type="radio", id="v-none", name="v", value=""]; + label[for="v-none"] { "No video" } + } - fieldset.audio { - legend { "Audio" } - @for (i, (tid, track)) in audio_tracks.iter().enumerate() { - input[type="radio", id=tid, name="a", value=tid, checked=i==0]; - label[for=tid] { @format!("{track}") } br; - } - input[type="radio", id="a-none", name="a", value=""]; - label[for="a-none"] { "No audio" } + fieldset.audio { + legend { "Audio" } + @for (i, (tid, track)) in audio_tracks.iter().enumerate() { + input[type="radio", id=tid, name="a", value=tid, checked=i==0]; + label[for=tid] { @format!("{track}") } br; } + input[type="radio", id="a-none", name="a", value=""]; + label[for="a-none"] { "No audio" } + } - fieldset.subtitles { - legend { "Subtitles" } - @for (_i, (tid, track)) in sub_tracks.iter().enumerate() { - input[type="radio", id=tid, name="s", value=tid]; - label[for=tid] { @format!("{track}") } br; - } - input[type="radio", id="s-none", name="s", value="", checked=true]; - label[for="s-none"] { "No subtitles" } + fieldset.subtitles { + legend { "Subtitles" } + @for (_i, (tid, track)) in sub_tracks.iter().enumerate() { + input[type="radio", id=tid, name="s", value=tid]; + label[for=tid] { @format!("{track}") } br; } - - input[type="submit", value="Start playback"]; + input[type="radio", id="s-none", name="s", value="", checked=true]; + label[for="s-none"] { "No subtitles" } } - }, - ..Default::default() - }) + + input[type="submit", value="Start playback"]; + } + } } diff --git a/server/src/routes/ui/style/player.css b/server/src/routes/ui/style/player.css index deff065..bd65a4b 100644 --- a/server/src/routes/ui/style/player.css +++ b/server/src/routes/ui/style/player.css @@ -55,6 +55,9 @@ fieldset label:hover { color: var(--accent-light); } +.playerconf { + margin: 2em; +} .playerconf h2 { grid-area: h; text-align: center; -- cgit v1.2.3-70-g09d2