diff options
Diffstat (limited to 'server')
| -rw-r--r-- | server/src/routes/search.rs | 45 |
1 files changed, 23 insertions, 22 deletions
diff --git a/server/src/routes/search.rs b/server/src/routes/search.rs index 8726b8e..3254394 100644 --- a/server/src/routes/search.rs +++ b/server/src/routes/search.rs @@ -13,7 +13,7 @@ use jellycommon::{ *, }; use jellydb::{Filter, Query, Sort}; -use jellyui::components::items::Items; +use jellyui::components::search::Search; use log::info; use rocket::{get, response::content::RawHtml}; @@ -21,30 +21,31 @@ use rocket::{get, response::content::RawHtml}; pub async fn r_search(ri: RequestInfo<'_>, q: Option<&str>) -> MyResult<RawHtml<String>> { ri.require_user()?; - let q = q.unwrap(); - let mut items = Vec::new(); - let t = Instant::now(); - ri.state.database.transaction(&mut |txn| { - let rows = txn - .query(Query { - filter: Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), - sort: Sort::TextSearch(Path(vec![NO_TITLE.0]), q.to_owned()), - ..Default::default() - })? - .take(64) - .collect::<Result<Vec<_>, _>>()?; + if let Some(q) = q { + let t = Instant::now(); + ri.state.database.transaction(&mut |txn| { + let rows = txn + .query(Query { + filter: Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), + sort: Sort::TextSearch(Path(vec![NO_TITLE.0]), q.to_owned()), + ..Default::default() + })? + .take(64) + .collect::<Result<Vec<_>, _>>()?; - items.clear(); - for (r, _is) in rows { - let node = txn.get(r)?.unwrap(); - items.push(node); - } - Ok(()) - })?; - info!("search {q:?} took {:?}", t.elapsed()); + items.clear(); + for (r, _is) in rows { + let node = txn.get(r)?.unwrap(); + items.push(node); + } + Ok(()) + })?; + info!("search {q:?} took {:?}", t.elapsed()); + } - Ok(ri.respond_ui(&Items { + Ok(ri.respond_ui(&Search { + query: q.unwrap_or_default(), items: &items .iter() .map(|node| Nku { |