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