From f73aa32549743b2967160d38c1622199c41524a4 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 29 Apr 2025 15:19:36 +0200 Subject: aaaaaaa --- server/src/compat/jellyfin/mod.rs | 85 +++++++++++++++++++-------------------- 1 file changed, 41 insertions(+), 44 deletions(-) (limited to 'server/src/compat/jellyfin/mod.rs') diff --git a/server/src/compat/jellyfin/mod.rs b/server/src/compat/jellyfin/mod.rs index 9d5c93e..20f8c7e 100644 --- a/server/src/compat/jellyfin/mod.rs +++ b/server/src/compat/jellyfin/mod.rs @@ -6,25 +6,22 @@ pub mod models; use crate::{ - logic::session::Session, - ui::{ - account::login_logic, - assets::{ - rocket_uri_macro_r_asset, rocket_uri_macro_r_item_backdrop, - rocket_uri_macro_r_item_poster, - }, - error::MyResult, - node::{aspect_class, DatabaseNodeUserDataExt}, - sort::{filter_and_sort_nodes, FilterProperty, NodeFilterSort, SortOrder, SortProperty}, - }, + helper::A, + ui::{account::login_logic, error::MyResult}, }; use anyhow::{anyhow, Context}; use jellybase::{database::Database, CONF}; use jellycommon::{ + api::{FilterProperty, NodeFilterSort, SortOrder, SortProperty}, + routes::{u_asset, u_node_slug_backdrop, u_node_slug_poster}, stream::{StreamContainer, StreamSpec}, user::{NodeUserData, WatchedState}, MediaInfo, Node, NodeID, NodeKind, SourceTrack, SourceTrackKind, Visibility, }; +use jellylogic::{ + filter_sort::filter_and_sort_nodes, node::DatabaseNodeUserDataExt, session::Session, +}; +use jellyui::node_page::aspect_class; use models::*; use rocket::{ get, @@ -86,7 +83,7 @@ pub fn r_jellyfin_quickconnect_enabled() -> Json { } #[get("/System/Endpoint")] -pub fn r_jellyfin_system_endpoint(_session: Session) -> Json { +pub fn r_jellyfin_system_endpoint(_session: A) -> Json { Json(json!({ "IsLocal": false, "IsInNetwork": false, @@ -95,7 +92,7 @@ pub fn r_jellyfin_system_endpoint(_session: Session) -> Json { use rocket_ws::{Message, Stream, WebSocket}; #[get("/socket")] -pub fn r_jellyfin_socket(_session: Session, ws: WebSocket) -> Stream!['static] { +pub fn r_jellyfin_socket(_session: A, ws: WebSocket) -> Stream!['static] { Stream! { ws => for await message in ws { eprintln!("{message:?}"); @@ -105,7 +102,7 @@ pub fn r_jellyfin_socket(_session: Session, ws: WebSocket) -> Stream!['static] { } #[get("/System/Info")] -pub fn r_jellyfin_system_info(_session: Session) -> Json { +pub fn r_jellyfin_system_info(_session: A) -> Json { Json(json!({ "OperatingSystemDisplayName": "", "HasPendingRestart": false, @@ -135,7 +132,7 @@ pub fn r_jellyfin_system_info(_session: Session) -> Json { } #[get("/DisplayPreferences/usersettings")] -pub fn r_jellyfin_displaypreferences_usersettings(_session: Session) -> Json { +pub fn r_jellyfin_displaypreferences_usersettings(_session: A) -> Json { Json(json!({ "Id": "3ce5b65d-e116-d731-65d1-efc4a30ec35c", "SortBy": "SortName", @@ -153,53 +150,53 @@ pub fn r_jellyfin_displaypreferences_usersettings(_session: Session) -> Json) {} #[get("/Users/")] -pub fn r_jellyfin_users_id(session: Session, id: &str) -> Json { +pub fn r_jellyfin_users_id(session: A, id: &str) -> Json { let _ = id; - Json(user_object(session.user.name)) + Json(user_object(session.0.user.name)) } #[get("/Items//Images/Primary?&")] #[allow(non_snake_case)] pub fn r_jellyfin_items_image_primary( - _session: Session, + _session: A, id: &str, fillWidth: Option, tag: String, ) -> Redirect { if tag == "poster" { - Redirect::permanent(rocket::uri!(r_item_poster(id, fillWidth))) + Redirect::permanent(u_node_slug_poster(id, fillWidth.unwrap_or(1024))) } else { - Redirect::permanent(rocket::uri!(r_asset(tag, fillWidth))) + Redirect::permanent(u_asset(&tag, fillWidth.unwrap_or(1024))) } } #[get("/Items//Images/Backdrop/0?")] #[allow(non_snake_case)] pub fn r_jellyfin_items_images_backdrop( - _session: Session, + _session: A, id: &str, maxWidth: Option, ) -> Redirect { - Redirect::permanent(rocket::uri!(r_item_backdrop(id, maxWidth))) + Redirect::permanent(u_node_slug_backdrop(id, maxWidth.unwrap_or(1024))) } #[get("/Items/")] #[allow(private_interfaces)] pub fn r_jellyfin_items_item( - session: Session, + session: A, database: &State, id: &str, ) -> MyResult> { - let (n, ud) = database.get_node_with_userdata(NodeID::from_slug(id), &session)?; + let (n, ud) = database.get_node_with_userdata(NodeID::from_slug(id), &session.0)?; Ok(Json(item_object(&n, &ud))) } #[get("/Users//Items/")] #[allow(private_interfaces)] pub fn r_jellyfin_users_items_item( - session: Session, + session: A, database: &State, uid: &str, id: &str, @@ -228,7 +225,7 @@ struct JellyfinItemQuery { #[get("/Users//Items?")] #[allow(private_interfaces)] pub fn r_jellyfin_users_items( - session: Session, + session: A, database: &State, uid: &str, query: JellyfinItemQuery, @@ -240,7 +237,7 @@ pub fn r_jellyfin_users_items( #[get("/Artists?")] #[allow(private_interfaces)] pub fn r_jellyfin_artists( - session: Session, + session: A, database: &State, mut query: JellyfinItemQuery, ) -> MyResult> { @@ -256,7 +253,7 @@ pub fn r_jellyfin_artists( #[get("/Persons?")] #[allow(private_interfaces)] pub fn r_jellyfin_persons( - session: Session, + session: A, database: &State, mut query: JellyfinItemQuery, ) -> MyResult> { @@ -272,7 +269,7 @@ pub fn r_jellyfin_persons( #[get("/Items?")] #[allow(private_interfaces)] pub fn r_jellyfin_items( - session: Session, + session: A, database: &State, query: JellyfinItemQuery, ) -> MyResult> { @@ -320,7 +317,7 @@ pub fn r_jellyfin_items( let mut nodes = nodes .into_iter() - .map(|nid| database.get_node_with_userdata(nid, &session)) + .map(|nid| database.get_node_with_userdata(nid, &session.0)) .collect::, anyhow::Error>>()?; filter_and_sort_nodes( @@ -352,7 +349,7 @@ pub fn r_jellyfin_items( #[get("/UserViews?")] #[allow(non_snake_case)] pub fn r_jellyfin_users_views( - session: Session, + session: A, database: &State, userId: &str, ) -> MyResult> { @@ -362,7 +359,7 @@ pub fn r_jellyfin_users_views( .get_node_children(NodeID::from_slug("library")) .context("root node missing")? .into_iter() - .map(|nid| database.get_node_with_userdata(nid, &session)) + .map(|nid| database.get_node_with_userdata(nid, &session.0)) .collect::, anyhow::Error>>()?; toplevel.sort_by_key(|(n, _)| n.index.unwrap_or(usize::MAX)); @@ -382,7 +379,7 @@ pub fn r_jellyfin_users_views( } #[get("/Items//Similar")] -pub fn r_jellyfin_items_similar(_session: Session, id: &str) -> Json { +pub fn r_jellyfin_items_similar(_session: A, id: &str) -> Json { let _ = id; Json(json!({ "Items": [], @@ -392,7 +389,7 @@ pub fn r_jellyfin_items_similar(_session: Session, id: &str) -> Json { } #[get("/LiveTv/Programs/Recommended")] -pub fn r_jellyfin_livetv_programs_recommended(_session: Session) -> Json { +pub fn r_jellyfin_livetv_programs_recommended(_session: A) -> Json { Json(json!({ "Items": [], "TotalRecordCount": 0, @@ -401,7 +398,7 @@ pub fn r_jellyfin_livetv_programs_recommended(_session: Session) -> Json } #[get("/Users//Items//Intros")] -pub fn r_jellyfin_items_intros(_session: Session, uid: &str, id: &str) -> Json { +pub fn r_jellyfin_items_intros(_session: A, uid: &str, id: &str) -> Json { let _ = (uid, id); Json(json!({ "Items": [], @@ -411,7 +408,7 @@ pub fn r_jellyfin_items_intros(_session: Session, uid: &str, id: &str) -> Json Json { +pub fn r_jellyfin_shows_nextup(_session: A) -> Json { Json(json!({ "Items": [], "TotalRecordCount": 0, @@ -421,7 +418,7 @@ pub fn r_jellyfin_shows_nextup(_session: Session) -> Json { #[post("/Items//PlaybackInfo")] pub fn r_jellyfin_items_playbackinfo( - _session: Session, + _session: A, database: &State, id: &str, ) -> MyResult> { @@ -438,7 +435,7 @@ pub fn r_jellyfin_items_playbackinfo( #[get("/Videos//stream.webm")] pub fn r_jellyfin_video_stream( - _session: Session, + _session: A, database: &State, id: &str, ) -> MyResult { @@ -463,14 +460,14 @@ struct JellyfinProgressData { #[post("/Sessions/Playing/Progress", data = "")] #[allow(private_interfaces)] pub fn r_jellyfin_sessions_playing_progress( - session: Session, + session: A, database: &State, data: Json, ) -> MyResult<()> { let position = data.position_ticks / 10_000_000.; database.update_node_udata( NodeID::from_slug(&data.item_id), - &session.user.name, + &session.0.user.name, |udata| { udata.watched = match udata.watched { WatchedState::None | WatchedState::Pending | WatchedState::Progress(_) => { @@ -485,16 +482,16 @@ pub fn r_jellyfin_sessions_playing_progress( } #[post("/Sessions/Playing")] -pub fn r_jellyfin_sessions_playing(_session: Session) {} +pub fn r_jellyfin_sessions_playing(_session: A) {} #[get("/Playback/BitrateTest?")] #[allow(non_snake_case)] -pub fn r_jellyfin_playback_bitratetest(_session: Session, Size: usize) -> Vec { +pub fn r_jellyfin_playback_bitratetest(_session: A, Size: usize) -> Vec { vec![0; Size.min(1_000_000)] } #[post("/Sessions/Capabilities/Full")] -pub fn r_jellyfin_sessions_capabilities_full(_session: Session) {} +pub fn r_jellyfin_sessions_capabilities_full(_session: A) {} #[derive(Deserialize)] #[serde(rename_all = "PascalCase")] -- cgit v1.2.3-70-g09d2