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