From 22f9b6b447ec031a1c4727f2f922c4bb8e4f8066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Mon, 29 Jul 2024 13:00:41 +0200 Subject: [PATCH] refactor(backend): don't use Option to compile out preview support --- cli/src/main.rs | 8 ++------ cli/src/previews/mod.rs | 4 +++- cli/src/routes.rs | 33 +++++++++++++++++++-------------- 3 files changed, 24 insertions(+), 21 deletions(-) diff --git a/cli/src/main.rs b/cli/src/main.rs index a4c8817..333e735 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -427,11 +427,10 @@ async fn main() -> Result<()> { let browser_enabled = !args.no_desktop && webui_enabled && !args.no_browser; let preview_path = upend.path.join("previews"); - #[cfg(feature = "previews")] - let preview_store = Some(Arc::new(crate::previews::PreviewStore::new( + let preview_store = Arc::new(previews::PreviewStore::new( preview_path.clone(), store.clone(), - ))); + )); if args.clean { info!("Cleaning temporary directories..."); @@ -443,9 +442,6 @@ async fn main() -> Result<()> { } } - #[cfg(not(feature = "previews"))] - let preview_store = None; - let mut bind: SocketAddr = args.bind.parse().expect("Incorrect bind format."); let secret = args.secret.unwrap_or_else(|| { diff --git a/cli/src/previews/mod.rs b/cli/src/previews/mod.rs index bfd8856..0f81ae7 100644 --- a/cli/src/previews/mod.rs +++ b/cli/src/previews/mod.rs @@ -37,7 +37,6 @@ pub struct PreviewStore { max_limit: Semaphore, } -#[cfg(feature = "previews")] impl PreviewStore { pub fn new>(path: P, store: Arc>) -> Self { PreviewStore { @@ -47,7 +46,10 @@ impl PreviewStore { max_limit: Semaphore::new(num_cpus::get()), } } +} +#[cfg(feature = "previews")] +impl PreviewStore { async fn get_path( &self, hash: &UpMultihash, diff --git a/cli/src/routes.rs b/cli/src/routes.rs index 322327d..106c7df 100644 --- a/cli/src/routes.rs +++ b/cli/src/routes.rs @@ -56,7 +56,7 @@ pub struct State { pub store: Arc>, pub config: UpEndConfig, pub job_container: jobs::JobContainer, - pub preview_store: Option>, + pub preview_store: Arc, pub public: Arc>, } @@ -345,14 +345,14 @@ pub async fn get_thumbnail( check_auth(&req, &state)?; #[cfg(feature = "previews")] - if let Some(preview_store) = &state.preview_store { + { let hash = hash.into_inner(); let address = Address::decode(&b58_decode(&hash).map_err(ErrorInternalServerError)?) .map_err(ErrorInternalServerError)?; - if let Address::Hash(address_hash) = address { - let preview_store = preview_store.clone(); + return if let Address::Hash(address_hash) = address { let _job_container = state.job_container.clone(); - let preview_result = preview_store + let preview_result = state + .preview_store .get(address_hash, query, _job_container) .await .map_err(|e| { @@ -367,21 +367,25 @@ pub async fn get_thumbnail( file = file.set_content_type(mime); } } - return Ok(Either::Left(file)); + Ok(Either::Left(file)) } else { - return Ok(Either::Right( + Ok(Either::Right( HttpResponse::SeeOther() .append_header((http::header::LOCATION, format!("../../api/raw/{hash}"))) .finish(), - )); + )) } } else { - return Err(ErrorBadRequest( + Err(ErrorBadRequest( "Address does not refer to a previewable object.", - )); - } + )) + }; + } + + #[cfg(not(feature = "previews"))] + { + Err(error::ErrorNotImplemented("Previews not enabled.")) } - Err(error::ErrorNotImplemented("Previews not enabled.")) } #[post("/api/query")] @@ -1217,6 +1221,7 @@ mod tests { use std::fs::File; use super::*; + use anyhow::Result; use tempfile::TempDir; use upend_base::hash::UpMultihash; @@ -1402,7 +1407,7 @@ mod tests { State { upend, - store, + store: store.clone(), config: UpEndConfig { vault_name: Some("TEST VAULT".to_string()), desktop_enabled: false, @@ -1410,7 +1415,7 @@ mod tests { secret: "secret".to_string(), }, job_container, - preview_store: None, + preview_store: Arc::new(PreviewStore::new("", store)), public: Arc::new(Mutex::new(true)), } }