diff options
Diffstat (limited to 'server/src/ui/search.rs')
-rw-r--r-- | server/src/ui/search.rs | 47 |
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, + ))) }) } |