diff options
Diffstat (limited to 'server/src/ui/player.rs')
| -rw-r--r-- | server/src/ui/player.rs | 90 |
1 files changed, 15 insertions, 75 deletions
diff --git a/server/src/ui/player.rs b/server/src/ui/player.rs index f0d6dea..1050abb 100644 --- a/server/src/ui/player.rs +++ b/server/src/ui/player.rs @@ -4,13 +4,14 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ use super::error::MyResult; -use crate::{request_info::RequestInfo, ui_responder::UiResponse}; +use crate::request_info::RequestInfo; use jellycommon::{ - jellyobject::{OBB, Object, Path}, + jellyobject::{Object, ObjectBuffer, Path}, *, }; use jellydb::{Filter, Query}; -use rocket::get; +use jellyui::components::node_page::Player; +use rocket::{get, response::content::RawHtml}; // fn jellynative_url(action: &str, seek: f64, secret: &str, node: &str, session: &str) -> String { // let protocol = if CONF.tls { "https" } else { "http" }; @@ -26,88 +27,27 @@ use rocket::get; // } #[get("/n/<slug>/player?<t>", rank = 4)] -pub fn r_player(ri: RequestInfo<'_>, t: Option<f64>, slug: &str) -> MyResult<UiResponse> { +pub fn r_player(ri: RequestInfo<'_>, t: Option<f64>, slug: &str) -> MyResult<RawHtml<String>> { ri.require_user()?; let _ = t; - let mut page = OBB::new(); + let mut node = ObjectBuffer::empty(); ri.state.database.transaction(&mut |txn| { if let Some(row) = txn.query_single(Query { filter: Filter::Match(Path(vec![NO_SLUG.0]), slug.into()), ..Default::default() })? { - let n = txn.get(row)?.unwrap(); - let nku = Object::EMPTY.insert(NKU_NODE, n.as_object()); - - page = OBB::new(); - let title = nku - .as_object() - .get(NKU_NODE) - .unwrap_or_default() - .get(NO_TITLE) - .unwrap_or_default(); - page.push(VIEW_TITLE, title); - page.push(VIEW_PLAYER, nku.as_object()); + node = txn.get(row)?.unwrap(); } Ok(()) })?; - Ok(ri.respond_ui(page)) + Ok(ri.respond_ui(&Player { + ri: &ri.render_info(), + nku: Nku { + node: node.as_object(), + userdata: Object::EMPTY, + role: None, + }, + })) } - -// pub fn player_conf<'a>(item: Arc<Node>, playing: bool) -> anyhow::Result<DynRender<'a>> { -// let mut audio_tracks = vec![]; -// let mut video_tracks = vec![]; -// let mut sub_tracks = vec![]; -// let tracks = item -// .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)), -// SourceTrackKind::Subtitles => sub_tracks.push((tid, track)), -// } -// } - -// Ok(markup::new! { -// form.playerconf[method = "GET", action = ""] { -// h2 { "Select tracks for " @item.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.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" } -// } - -// input[type="submit", value=if playing { "Change tracks" } else { "Start playback" }]; -// } -// }) -// } |