pub fn media_type_from_mime(mime: &str) -> MediaType {
if mime.starts_with("image/") {
MediaType::Image
} else if mime.starts_with("video/") {
MediaType::Video
} else if mime.starts_with("audio/") {
MediaType::Audio
} else {
MediaType::File
}
}
#[derive(Clone, Debug, PartialEq)]
pub enum MediaType {
Image,
Video,
Audio,
File,
}
pub fn fit_dimensions(
original_width: u32,
original_height: u32,
max_width: u32,
max_height: u32,
) -> (u32, u32) {
if original_width == 0 || original_height == 0 {
return (max_width, max_height);
}
let width_ratio = max_width as f64 / original_width as f64;
let height_ratio = max_height as f64 / original_height as f64;
let ratio = width_ratio.min(height_ratio).min(1.0);
let new_width = (original_width as f64 * ratio) as u32;
let new_height = (original_height as f64 * ratio) as u32;
(new_width.max(1), new_height.max(1))
}
pub fn file_icon_for_mime(mime: &str) -> &'static str {
match mime {
m if m.starts_with("image/") => "image",
m if m.starts_with("video/") => "video",
m if m.starts_with("audio/") => "audio",
"application/pdf" => "pdf",
m if m.contains("zip") || m.contains("tar") || m.contains("gzip") => "archive",
m if m.contains("text") => "text",
_ => "file",
}
}