fix(services/january): support svg for embed generation

This commit is contained in:
Paul Makles
2024-10-02 15:20:35 +01:00
parent 2cb12a3d59
commit 520fb02fb6
2 changed files with 27 additions and 15 deletions

View File

@@ -124,13 +124,24 @@ pub fn image_size(f: &NamedTempFile) -> Option<(usize, usize)> {
} }
/// Determine size of image with buffer /// Determine size of image with buffer
pub fn image_size_vec(v: &[u8]) -> Option<(usize, usize)> { pub fn image_size_vec(v: &[u8], mime: &str) -> Option<(usize, usize)> {
if let Ok(size) = imagesize::blob_size(v) match mime {
.inspect_err(|err| tracing::error!("Failed to generate image size! {err:?}")) "image/svg+xml" => {
{ let tree =
Some((size.width, size.height)) report_internal_error!(usvg::Tree::from_data(v, &Default::default())).ok()?;
} else {
None let size = tree.size();
Some((size.width() as usize, size.height() as usize))
}
_ => {
if let Ok(size) = imagesize::blob_size(v)
.inspect_err(|err| tracing::error!("Failed to generate image size! {err:?}"))
{
Some((size.width, size.height))
} else {
None
}
}
} }
} }

View File

@@ -122,20 +122,21 @@ impl Request {
_ => Ok(None), _ => Ok(None),
} }
} else { } else {
let response = if let Some(Request { response, .. }) = request { let request = if let Some(request) = request {
response request
} else { } else {
let Request { response, mime } = Request::new(url).await?; let request = Request::new(url).await?;
if matches!(mime.type_(), mime::IMAGE) { if matches!(request.mime.type_(), mime::IMAGE) {
response request
} else { } else {
return Err(create_error!(FileTypeNotAllowed)); return Err(create_error!(FileTypeNotAllowed));
} }
}; };
if let Some((width, height)) = if let Some((width, height)) = image_size_vec(
image_size_vec(&report_internal_error!(response.bytes().await)?) &report_internal_error!(request.response.bytes().await)?,
{ request.mime.as_ref(),
) {
Ok(Some(Image { Ok(Some(Image {
url: url.to_owned(), url: url.to_owned(),
width, width,