/* This file is part of jellything (https://codeberg.org/metamuffin/jellything) which is licensed under the GNU Affero General Public License (version 3); see /COPYING. Copyright (C) 2025 metamuffin */ use super::error::MyResult; use crate::helper::{accept::AcceptJson, language::AcceptLanguage, A}; use anyhow::anyhow; 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}; #[get("/search?&")] pub async fn r_search<'a>( session: A, aj: AcceptJson, query: Option<&str>, page: Option, lang: AcceptLanguage, ) -> MyResult, Json>> { let AcceptLanguage(lang) = lang; let r = query .map(|query| search(&session.0, query, page)) .transpose()?; Ok(if *aj { let Some(r) = r else { Err(anyhow!("no query"))? }; Either::Right(Json(r)) } else { 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.0.user, }), }, lang, ))) }) }