aboutsummaryrefslogtreecommitdiff
path: root/server/src/ui/search.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/ui/search.rs')
-rw-r--r--server/src/ui/search.rs47
1 files changed, 32 insertions, 15 deletions
diff --git a/server/src/ui/search.rs b/server/src/ui/search.rs
index 51fdcb8..bacaaee 100644
--- a/server/src/ui/search.rs
+++ b/server/src/ui/search.rs
@@ -3,17 +3,19 @@
which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
Copyright (C) 2025 metamuffin <metamuffin.org>
*/
-use super::{
- error::MyResult,
- layout::{trs, DynLayoutPage, LayoutPage},
- node::{DatabaseNodeUserDataExt, NodeCard},
-};
-use crate::{api::AcceptJson, locale::AcceptLanguage, logic::session::Session};
+use super::error::MyResult;
+use crate::{api::AcceptJson, locale::AcceptLanguage};
use anyhow::anyhow;
-use jellybase::{database::Database, locale::tr};
-use jellycommon::{api::ApiSearchResponse, Visibility};
-use rocket::{get, serde::json::Json, Either, State};
-use std::time::Instant;
+use jellybase::database::Database;
+use jellycommon::api::ApiSearchResponse;
+use jellyimport::is_importing;
+use jellylogic::{search::search, session::Session};
+use jellyui::{
+ render_page,
+ scaffold::{RenderInfo, SessionInfo},
+ search::SearchPage,
+};
+use rocket::{get, response::content::RawHtml, serde::json::Json, Either, State};
#[get("/search?<query>&<page>")]
pub async fn r_search<'a>(
@@ -23,15 +25,30 @@ pub async fn r_search<'a>(
query: Option<&str>,
page: Option<usize>,
lang: AcceptLanguage,
-) -> MyResult<Either<DynLayoutPage<'a>, Json<ApiSearchResponse>>> {
+) -> MyResult<Either<RawHtml<String>, Json<ApiSearchResponse>>> {
let AcceptLanguage(lang) = lang;
-
+
+ let r = query
+ .map(|query| search(db, &session, query, page))
+ .transpose()?;
+
Ok(if *aj {
- let Some((count, results, _)) = results else {
+ let Some(r) = r else {
Err(anyhow!("no query"))?
};
- Either::Right(Json(ApiSearchResponse { count, results }))
+ Either::Right(Json(r))
} else {
- Either::Left()
+ Either::Left(RawHtml(render_page(
+ &SearchPage {
+ lang: &lang,
+ query: &query.map(|s| s.to_string()),
+ r,
+ },
+ RenderInfo {
+ importing: is_importing(),
+ session: Some(SessionInfo { user: session.user }),
+ },
+ lang,
+ )))
})
}