aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/player.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-03-03 18:15:47 +0100
committermetamuffin <metamuffin@disroot.org>2025-03-03 18:15:47 +0100
commitbf84be508aa415b45a51fc0fe007a0879f7bfab7 (patch)
tree6a98c9a534dbb5eed899d0f9ff6f6499dddfd0db /server/src/routes/ui/player.rs
parent26d3a70b0be2809177076e155f987e18e2b2ceb2 (diff)
downloadjellything-bf84be508aa415b45a51fc0fe007a0879f7bfab7.tar
jellything-bf84be508aa415b45a51fc0fe007a0879f7bfab7.tar.bz2
jellything-bf84be508aa415b45a51fc0fe007a0879f7bfab7.tar.zst
nodepage in player and tags
Diffstat (limited to 'server/src/routes/ui/player.rs')
-rw-r--r--server/src/routes/ui/player.rs36
1 files changed, 23 insertions, 13 deletions
diff --git a/server/src/routes/ui/player.rs b/server/src/routes/ui/player.rs
index 2f28f74..c2188a8 100644
--- a/server/src/routes/ui/player.rs
+++ b/server/src/routes/ui/player.rs
@@ -6,12 +6,14 @@
use super::{
account::session::{token, Session},
layout::LayoutPage,
+ node::{get_similar_media, DatabaseNodeUserDataExt, NodePage},
+ sort::NodeFilterSort,
};
use crate::{
database::Database,
routes::{
stream::rocket_uri_macro_r_stream,
- ui::{assets::rocket_uri_macro_r_item_backdrop, error::MyResult, layout::DynLayoutPage},
+ ui::{error::MyResult, layout::DynLayoutPage},
},
uri,
};
@@ -20,7 +22,7 @@ use jellybase::{permission::PermissionSetExt, CONF};
use jellycommon::{
stream::{StreamFormat, StreamSpec},
user::{PermissionSet, PlayerKind, UserPermission},
- Node, NodeID, SourceTrackKind, TrackID,
+ Node, NodeID, SourceTrackKind, TrackID, Visibility,
};
use markup::DynRender;
use rocket::{get, response::Redirect, Either, FromForm, State, UriDisplayQuery};
@@ -59,12 +61,23 @@ fn jellynative_url(action: &str, seek: f64, secret: &str, node: &str, session: &
#[get("/n/<id>/player?<conf..>", rank = 4)]
pub fn r_player(
- sess: Session,
+ session: Session,
db: &State<Database>,
id: NodeID,
conf: PlayerConfig,
) -> MyResult<Either<DynLayoutPage<'_>, Redirect>> {
- let node = db.get_node(id)?.ok_or(anyhow!("node does not exist"))?;
+ let (node, udata) = db.get_node_with_userdata(id, &session)?;
+
+ let mut parents = node
+ .parents
+ .iter()
+ .map(|pid| db.get_node_with_userdata(*pid, &session))
+ .collect::<anyhow::Result<Vec<_>>>()?;
+
+ let mut similar = get_similar_media(&node, db, &session)?;
+
+ similar.retain(|(n, _)| n.visibility >= Visibility::Reduced);
+ parents.retain(|(n, _)| n.visibility >= Visibility::Reduced);
let native_session = |action: &str| {
let perm = [
@@ -73,22 +86,22 @@ pub fn r_player(
UserPermission::StreamFormat(StreamFormat::Fragment),
];
for perm in &perm {
- sess.user.permissions.assert(perm)?;
+ session.user.permissions.assert(perm)?;
}
Ok(Either::Right(Redirect::temporary(jellynative_url(
action,
conf.t.unwrap_or(0.),
- &sess.user.native_secret,
+ &session.user.native_secret,
&id.to_string(),
&token::create(
- sess.user.name,
+ session.user.name,
PermissionSet(perm.map(|e| (e, true)).into()),
chrono::Duration::hours(24),
),
))))
};
- match conf.kind.unwrap_or(sess.user.player_preference) {
+ match conf.kind.unwrap_or(session.user.player_preference) {
PlayerKind::Browser => (),
PlayerKind::Native => {
return native_session("player-v2");
@@ -117,11 +130,8 @@ pub fn r_player(
title: node.title.to_owned().unwrap_or_default(),
class: Some("player"),
content: markup::new! {
- @if playing {
- video[src=uri!(r_stream(&node.slug, &spec)), controls, preload="auto"]{}
- } else {
- img.backdrop[src=uri!(r_item_backdrop(&node.slug, Some(2048))).to_string()];
- }
+ video[id="player", src=uri!(r_stream(&node.slug, &spec)), controls, preload="auto"]{}
+ @NodePage { children: &[], parents: &parents, filter: &NodeFilterSort::default(), node: &node, udata: &udata, player: true, similar: &similar }
@conf
},
}))