aboutsummaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2026-02-19 23:11:18 +0100
committermetamuffin <metamuffin@disroot.org>2026-02-19 23:11:18 +0100
commit2b57e045de6f4a588f1aea58a5d616199dec4cfb (patch)
tree9171e1b80004ea68bf4b06b5bac31f0c5a87c935 /server
parent768688e34073e7430d92293fb0a995c7dc24cdf5 (diff)
downloadjellything-2b57e045de6f4a588f1aea58a5d616199dec4cfb.tar
jellything-2b57e045de6f4a588f1aea58a5d616199dec4cfb.tar.bz2
jellything-2b57e045de6f4a588f1aea58a5d616199dec4cfb.tar.zst
query parser
Diffstat (limited to 'server')
-rw-r--r--server/src/ui/home.rs47
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<_>>>()?;