From 2b57e045de6f4a588f1aea58a5d616199dec4cfb Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 19 Feb 2026 23:11:18 +0100 Subject: query parser --- server/src/ui/home.rs | 47 ++++++++++------------------------------------- 1 file changed, 10 insertions(+), 37 deletions(-) (limited to 'server') 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 */ +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 { 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 { 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 { 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 { Ok(ri.respond_ui(page.finish())) } -fn home_row(ri: &RequestInfo<'_>, title: &str, q: Query) -> Result { +fn home_row(ri: &RequestInfo<'_>, title: &str, query: &str) -> Result { + 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::>>()?; -- cgit v1.3