diff options
Diffstat (limited to 'server/src/ui/home.rs')
| -rw-r--r-- | server/src/ui/home.rs | 58 |
1 files changed, 49 insertions, 9 deletions
diff --git a/server/src/ui/home.rs b/server/src/ui/home.rs index 99946a0..86b6fbe 100644 --- a/server/src/ui/home.rs +++ b/server/src/ui/home.rs @@ -4,15 +4,16 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ +use std::time::Instant; + use super::error::MyResult; use crate::{request_info::RequestInfo, ui_responder::UiResponse}; use anyhow::Result; use jellycommon::{ - KIND_VIDEO, NKU_NODE, NLSTYLE_INLINE, NO_KIND, NO_RELEASEDATE, NODELIST_DISPLAYSTYLE, - NODELIST_ITEM, NODELIST_TITLE, VIEW_NODE_LIST, jellyobject::{Object, ObjectBuffer, Path}, + *, }; -use jellydb::{Filter, MultiBehaviour, Query, SortOrder, ValueSort}; +use jellydb::{Filter, MultiBehaviour, Query, Sort, SortOrder, ValueSort}; use rocket::get; #[get("/home")] @@ -21,12 +22,31 @@ pub fn r_home(ri: RequestInfo<'_>) -> MyResult<UiResponse> { let mut page = ObjectBuffer::empty(); - let root = home_row( + let latest_video = home_row( &ri, "home.bin.latest_video", Query { - filter: Filter::Match(Path(vec![NO_KIND.0]), KIND_VIDEO.0.to_be_bytes().to_vec()), - sort: jellydb::Sort::Value(ValueSort { + filter: Filter::All(vec![ + Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), + Filter::Match(Path(vec![NO_KIND.0]), KIND_VIDEO.into()), + ]), + sort: Sort::Value(ValueSort { + order: SortOrder::Descending, + path: Path(vec![NO_RELEASEDATE.0]), + multi: MultiBehaviour::First, + offset: None, + }), + }, + )?; + let latest_music = home_row( + &ri, + "home.bin.latest_music", + Query { + filter: Filter::All(vec![ + Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), + Filter::Match(Path(vec![NO_KIND.0]), KIND_MUSIC.into()), + ]), + sort: Sort::Value(ValueSort { order: SortOrder::Descending, path: Path(vec![NO_RELEASEDATE.0]), multi: MultiBehaviour::First, @@ -34,16 +54,35 @@ pub fn r_home(ri: RequestInfo<'_>) -> MyResult<UiResponse> { }), }, )?; + let max_rating = home_row( + &ri, + "home.bin.max_rating", + Query { + filter: Filter::True, + sort: Sort::Value(ValueSort { + order: SortOrder::Descending, + path: Path(vec![NO_RATINGS.0, RTYP_TMDB.0]), + multi: MultiBehaviour::First, + offset: None, + }), + }, + )?; - page = page - .as_object() - .insert_multi(VIEW_NODE_LIST, &[root.as_object()]); + page = page.as_object().insert_multi( + VIEW_NODE_LIST, + &[ + latest_video.as_object(), + latest_music.as_object(), + max_rating.as_object(), + ], + ); Ok(ri.respond_ui(page)) } fn home_row(ri: &RequestInfo<'_>, title: &str, q: Query) -> Result<ObjectBuffer> { let mut res = ObjectBuffer::empty(); + let t = Instant::now(); ri.state.database.transaction(&mut |txn| { let rows = txn.query(q.clone())?.take(16).collect::<Result<Vec<_>>>()?; @@ -60,5 +99,6 @@ fn home_row(ri: &RequestInfo<'_>, title: &str, q: Query) -> Result<ObjectBuffer> Ok(()) })?; + eprintln!("{:?}", t.elapsed()); Ok(res) } |