diff --git a/crates/core/result/src/axum.rs b/crates/core/result/src/axum.rs index dcf78240..80417d14 100644 --- a/crates/core/result/src/axum.rs +++ b/crates/core/result/src/axum.rs @@ -80,6 +80,7 @@ impl IntoResponse for Error { ErrorType::FileTooLarge { .. } => StatusCode::UNPROCESSABLE_ENTITY, ErrorType::FileTypeNotAllowed => StatusCode::BAD_REQUEST, ErrorType::ImageProcessingFailed => StatusCode::INTERNAL_SERVER_ERROR, + ErrorType::NoEmbedData => StatusCode::BAD_REQUEST, }; (status, Json(&self)).into_response() diff --git a/crates/core/result/src/lib.rs b/crates/core/result/src/lib.rs index 0d6a03fd..922a7676 100644 --- a/crates/core/result/src/lib.rs +++ b/crates/core/result/src/lib.rs @@ -163,6 +163,7 @@ pub enum ErrorType { }, FileTypeNotAllowed, ImageProcessingFailed, + NoEmbedData, // ? Legacy errors VosoUnavailable, diff --git a/crates/core/result/src/rocket.rs b/crates/core/result/src/rocket.rs index dfdbee49..4a39e2be 100644 --- a/crates/core/result/src/rocket.rs +++ b/crates/core/result/src/rocket.rs @@ -85,6 +85,7 @@ impl<'r> Responder<'r, 'static> for Error { ErrorType::FileTooLarge { .. } => Status::UnprocessableEntity, ErrorType::FileTypeNotAllowed => Status::BadRequest, ErrorType::ImageProcessingFailed => Status::InternalServerError, + ErrorType::NoEmbedData => Status::BadRequest, }; // Serialize the error data structure into JSON. diff --git a/crates/services/january/src/api.rs b/crates/services/january/src/api.rs index b875cbc3..d0772e99 100644 --- a/crates/services/january/src/api.rs +++ b/crates/services/january/src/api.rs @@ -1,6 +1,7 @@ use axum::{extract::Query, response::IntoResponse, routing::get, Json, Router}; use reqwest::header; -use revolt_result::Result; +use revolt_models::v0::Embed; +use revolt_result::{create_error, Result}; use serde::{Deserialize, Serialize}; use utoipa::ToSchema; @@ -87,5 +88,9 @@ async fn embed( Query(UrlQuery { url }): Query, // TypedHeader(Authorization(_bearer)): TypedHeader>, ) -> Result { - Request::generate_embed(url).await.map(Json) + match Request::generate_embed(url).await { + Ok(Embed::None) => Err(create_error!(NoEmbedData)), + result => result, + } + .map(Json) } diff --git a/crates/services/january/src/website_embed.rs b/crates/services/january/src/website_embed.rs index c1da8191..d6ee85d1 100644 --- a/crates/services/january/src/website_embed.rs +++ b/crates/services/january/src/website_embed.rs @@ -156,8 +156,13 @@ pub async fn create_website_embed(original_url: &str, document: &str) -> Option< } } + // remove image if video exists + if metadata.video.is_some() { + metadata.image.take(); + } + // fetch image size if missing - if metadata.special.is_none() && metadata.image.is_none() { + if metadata.special.is_none() { if let Some(Image { width, height, url, .. }) = &metadata.image