MovieMapper/ui/src/utils/format.rs
jarianc 00d8e072c5 feat: Add Rust UI and backend implementation with project infrastructure
Adds the new Rust-based UI (iced), backend service, shared Swift models,
CI/CD workflows, build scripts, and project documentation.
2026-08-19 21:22:08 -05:00

59 lines
1.7 KiB
Rust

use std::path::Path;
/// Format a duration in seconds to a human-readable string
pub fn format_duration(seconds: u64) -> String {
let hours = seconds / 3600;
let minutes = (seconds % 3600) / 60;
let remaining_seconds = seconds % 60;
if hours > 0 {
format!("{}h {}m {}s", hours, minutes, remaining_seconds)
} else if minutes > 0 {
format!("{}m {}s", minutes, remaining_seconds)
} else {
format!("{}s", remaining_seconds)
}
}
/// Format a file size in bytes to a human-readable string
pub fn format_file_size(size: u64) -> String {
const KB: u64 = 1024;
const MB: u64 = KB * 1024;
const GB: u64 = MB * 1024;
if size >= GB {
format!("{:.1} GB", size as f64 / GB as f64)
} else if size >= MB {
format!("{:.1} MB", size as f64 / MB as f64)
} else if size >= KB {
format!("{:.1} KB", size as f64 / KB as f64)
} else {
format!("{} B", size)
}
}
/// Format video quality
pub fn format_quality(width: Option<u32>, height: Option<u32>) -> String {
match (width, height) {
(Some(w), Some(h)) => {
if w >= 3840 && h >= 2160 {
"4K".to_string()
} else if w >= 1920 && h >= 1080 {
"1080p".to_string()
} else if w >= 1280 && h >= 720 {
"720p".to_string()
} else if w >= 854 && h >= 480 {
"480p".to_string()
} else {
format!("{}x{}", w, h)
}
}
_ => "Unknown".to_string(),
}
}
/// Get a display-friendly path string
pub fn display_path(path: &Path) -> String {
path.to_string_lossy().to_string()
}