diff --git a/src/uptime.rs b/src/uptime.rs index 9a0d1f7..3a8c828 100644 --- a/src/uptime.rs +++ b/src/uptime.rs @@ -5,16 +5,29 @@ pub fn get_current() -> Result { let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?; let uptime_seconds = info.uptime().as_secs(); - let total_minutes = uptime_seconds / 60; - let days = total_minutes / (60 * 24); - let hours = (total_minutes % (60 * 24)) / 60; - let minutes = total_minutes % 60; + let days = uptime_seconds / (60 * 60 * 24); + let hours = (uptime_seconds / 3600) % 24; + let minutes = (uptime_seconds / 60) % 60; - let parts = [(days, "day"), (hours, "hour"), (minutes, "minute")] - .iter() - .filter(|&&(value, _)| value > 0) - .map(|&(value, label)| format!("{value} {label}{}", if value > 1 { "s" } else { "" })) - .collect::>(); + let mut result = String::new(); + if days > 0 { + result.push_str(&format!("{days} day{}", if days > 1 { "s" } else { "" })); + } + if hours > 0 { + if !result.is_empty() { + result.push_str(", "); + } + result.push_str(&format!("{hours} hour{}", if hours > 1 { "s" } else { "" })); + } + if minutes > 0 { + if !result.is_empty() { + result.push_str(", "); + } + result.push_str(&format!( + "{minutes} minute{}", + if minutes > 1 { "s" } else { "" } + )); + } - Ok(parts.join(", ")) + Ok(result) }