diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-19 23:11:18 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-19 23:11:18 +0100 |
| commit | 2b57e045de6f4a588f1aea58a5d616199dec4cfb (patch) | |
| tree | 9171e1b80004ea68bf4b06b5bac31f0c5a87c935 /server | |
| parent | 768688e34073e7430d92293fb0a995c7dc24cdf5 (diff) | |
| download | jellything-2b57e045de6f4a588f1aea58a5d616199dec4cfb.tar jellything-2b57e045de6f4a588f1aea58a5d616199dec4cfb.tar.bz2 jellything-2b57e045de6f4a588f1aea58a5d616199dec4cfb.tar.zst | |
query parser
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/ui/home.rs | 47 |
1 files changed, 10 insertions, 37 deletions
diff --git a/server/src/ui/home.rs b/server/src/ui/home.rs index c25add1..f6340be 100644 --- a/server/src/ui/home.rs +++ b/server/src/ui/home.rs @@ -4,14 +4,16 @@ Copyright (C) 2026 metamuffin <metamuffin.org> */ +use std::str::FromStr; + use super::error::MyResult; use crate::{request_info::RequestInfo, ui_responder::UiResponse}; -use anyhow::Result; +use anyhow::{Context, Result}; use jellycommon::{ - jellyobject::{Object, ObjectBuffer, ObjectBufferBuilder, Path}, + jellyobject::{Object, ObjectBuffer, ObjectBufferBuilder}, *, }; -use jellydb::{Filter, MultiBehaviour, Query, Sort, SortOrder, ValueSort}; +use jellydb::Query; use jellyui::tr; use rocket::get; @@ -28,18 +30,7 @@ pub fn r_home(ri: RequestInfo<'_>) -> MyResult<UiResponse> { home_row( &ri, "home.bin.latest_video", - Query { - 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, - }), - }, + "FILTER (visi = visi AND kind = vide) SORT DESCENDING BY FIRST rldt", )? .as_object(), ); @@ -48,18 +39,7 @@ pub fn r_home(ri: RequestInfo<'_>) -> MyResult<UiResponse> { 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, - offset: None, - }), - }, + "FILTER (visi = visi AND kind = musi) SORT DESCENDING BY FIRST rldt", )? .as_object(), ); @@ -68,15 +48,7 @@ pub fn r_home(ri: RequestInfo<'_>) -> MyResult<UiResponse> { 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, - }), - }, + "SORT DESCENDING BY FIRST rtng.imdb", )? .as_object(), ); @@ -84,7 +56,8 @@ pub fn r_home(ri: RequestInfo<'_>) -> MyResult<UiResponse> { Ok(ri.respond_ui(page.finish())) } -fn home_row(ri: &RequestInfo<'_>, title: &str, q: Query) -> Result<ObjectBuffer> { +fn home_row(ri: &RequestInfo<'_>, title: &str, query: &str) -> Result<ObjectBuffer> { + let q = Query::from_str(query).context("parse query")?; let mut res = ObjectBuffer::empty(); ri.state.database.transaction(&mut |txn| { let rows = txn.query(q.clone())?.take(16).collect::<Result<Vec<_>>>()?; |