service/media: refactor to reduce indentation

This commit is contained in:
Lambda 2024-05-27 19:42:46 +00:00 committed by Charles Hall
parent ec1b086a35
commit c973485c73
No known key found for this signature in database
GPG key ID: 7B8E0645816E07CF

View file

@ -151,20 +151,35 @@ impl Service {
let mut file = Vec::new();
File::open(path).await?.read_to_end(&mut file).await?;
Ok(Some(FileMeta {
return Ok(Some(FileMeta {
content_disposition,
content_type,
file: file.clone(),
}))
} else if let Ok((content_disposition, content_type, key)) =
}));
}
// thumbnail not found, generate
let Ok((content_disposition, content_type, key)) =
self.db.search_file_metadata(mxc.clone(), 0, 0)
{
else {
return Ok(None);
};
// Generate a thumbnail
let path = services().globals.get_media_file(&key);
let mut file = Vec::new();
File::open(path).await?.read_to_end(&mut file).await?;
if let Ok(image) = image::load_from_memory(&file) {
let Ok(image) = image::load_from_memory(&file) else {
// Couldn't parse file to generate thumbnail, send original
return Ok(Some(FileMeta {
content_disposition,
content_type,
file: file.clone(),
}));
};
let original_width = image.width();
let original_height = image.height();
if width > original_width || height > original_height {
@ -180,8 +195,7 @@ impl Service {
} else {
let (exact_width, exact_height) = {
// Copied from image::dynimage::resize_dimensions
let use_width = (u64::from(width)
* u64::from(original_height))
let use_width = (u64::from(width) * u64::from(original_height))
<= (u64::from(original_width) * u64::from(height));
let intermediate = if use_width {
u64::from(original_height) * u64::from(width)
@ -192,14 +206,10 @@ impl Service {
};
if use_width {
if intermediate <= u64::from(::std::u32::MAX) {
(
width,
intermediate.try_into().unwrap_or(u32::MAX),
)
(width, intermediate.try_into().unwrap_or(u32::MAX))
} else {
(
(u64::from(width)
* u64::from(::std::u32::MAX)
(u64::from(width) * u64::from(::std::u32::MAX)
/ intermediate)
.try_into()
.unwrap_or(u32::MAX),
@ -207,15 +217,11 @@ impl Service {
)
}
} else if intermediate <= u64::from(::std::u32::MAX) {
(
intermediate.try_into().unwrap_or(u32::MAX),
height,
)
(intermediate.try_into().unwrap_or(u32::MAX), height)
} else {
(
::std::u32::MAX,
(u64::from(height)
* u64::from(::std::u32::MAX)
(u64::from(height) * u64::from(::std::u32::MAX)
/ intermediate)
.try_into()
.unwrap_or(u32::MAX),
@ -251,16 +257,5 @@ impl Service {
content_type,
file: thumbnail_bytes.clone(),
}))
} else {
// Couldn't parse file to generate thumbnail, send original
Ok(Some(FileMeta {
content_disposition,
content_type,
file: file.clone(),
}))
}
} else {
Ok(None)
}
}
}