diff --git a/Cargo.lock b/Cargo.lock index fdabdc5..79b2484 100755 --- a/Cargo.lock +++ b/Cargo.lock @@ -225,12 +225,6 @@ version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - [[package]] name = "indoc" version = "2.0.5" @@ -392,7 +386,6 @@ version = "0.1.0" dependencies = [ "clap", "crossterm", - "humantime", "mpd", "ratatui", "rust-fuzzy-search", diff --git a/Cargo.toml b/Cargo.toml index 89621b4..ef3cf49 100755 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,4 +13,3 @@ simple-dmenu = "0.1.0" ratatui = "0.26.2" crossterm = "0.27.0" rust-fuzzy-search = "0.1.1" -humantime = "2.1.0" diff --git a/README.md b/README.md index 5997eb4..e65e051 100755 --- a/README.md +++ b/README.md @@ -37,7 +37,7 @@ A MPD client in Rust - [x] improvements on queue control - [x] add to playlists - [x] search for songs -- [x] Humantime format +- [x] Human readable time format - [x] metadata based tree view - [ ] view playlist - [ ] change playlist name diff --git a/src/app.rs b/src/app.rs index c2ce06c..e38222d 100755 --- a/src/app.rs +++ b/src/app.rs @@ -1,3 +1,5 @@ +use std::time::Duration; + use crate::browser::FileBrowser; use crate::connection::Connection; use crate::list::ContentList; @@ -152,7 +154,9 @@ impl App { for (i, song) in self.queue_list.list.clone().iter().enumerate() { if song.contains(&file) { self.conn.conn.delete(i as u32).unwrap(); - if self.queue_list.index == self.queue_list.list.len() - 1 && self.queue_list.index != 0 { + if self.queue_list.index == self.queue_list.list.len() - 1 + && self.queue_list.index != 0 + { self.queue_list.index -= 1; } } @@ -268,4 +272,17 @@ impl App { pub fn reset_cursor(&mut self) { self.cursor_position = 0; } + + /// Given time in seconds, convert it to hh:mm:ss + pub fn format_time(time: Duration) -> String { + let time = time.as_secs(); + let h = time / 3600; + let m = (time % 3600) / 60; + let s = (time % 3600) % 60; + if h == 0 { + format!("{:02}:{:02}", m, s) + } else { + format!("{:02}:{:02}:{:02}", h, m, s) + } + } } diff --git a/src/ui.rs b/src/ui.rs index b4b789d..c1877a6 100755 --- a/src/ui.rs +++ b/src/ui.rs @@ -77,9 +77,8 @@ fn draw_directory_browser(frame: &mut Frame, app: &mut App, size: Rect) { .collect::>() .join(""); - let time = humantime::format_duration( - song.clone().duration.unwrap_or_else(|| Duration::new(0, 0)), - ); + let time = + App::format_time(song.clone().duration.unwrap_or_else(|| Duration::new(0, 0))); let mut status: bool = false; for sn in app.queue_list.list.iter() { @@ -188,9 +187,7 @@ fn draw_queue(frame: &mut Frame, app: &mut App, size: Rect) { .collect::>() .join(""); - let time = humantime::format_duration( - song.clone().duration.unwrap_or_else(|| Duration::new(0, 0)), - ); + let time = App::format_time(song.clone().duration.unwrap_or_else(|| Duration::new(0, 0))); if s.contains(&app.conn.current_song.file) { let row = Row::new(vec![ @@ -353,8 +350,8 @@ fn draw_progress_bar(frame: &mut Frame, app: &mut App, size: Rect) { let duration = if app.conn.total_duration.as_secs() != 0 { format!( "[{}/{}]", - humantime::format_duration(app.conn.elapsed), - humantime::format_duration(app.conn.total_duration) + App::format_time(app.conn.elapsed), + App::format_time(app.conn.total_duration) ) } else { "".to_string()