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.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/server/src/routes/ui/player.rs b/server/src/routes/ui/player.rs
index 2cc2dd4..d2a8236 100644
--- a/server/src/routes/ui/player.rs
+++ b/server/src/routes/ui/player.rs
@@ -6,6 +6,7 @@
use super::{
account::session::{token, Session},
layout::LayoutPage,
+ node::{get_similar_media, DatabaseNodeUserDataExt},
};
use crate::{
database::Database,
@@ -19,7 +20,7 @@ use jellybase::CONF;
use jellycommon::{
stream::{StreamContainer, StreamSpec},
user::{PermissionSet, PlayerKind},
- Node, NodeID, SourceTrackKind, TrackID,
+ Node, NodeID, SourceTrackKind, TrackID, Visibility,
};
use markup::DynRender;
use rocket::{get, response::Redirect, Either, FromForm, State, UriDisplayQuery};
@@ -59,28 +60,39 @@ 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| {
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::default(), // TODO
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");