forked from jmug/stoatchat
fix(services/january): support svg for embed generation
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user