From dc3f561de36fdfc283ebe0b6cf49f09f3bdc9282 Mon Sep 17 00:00:00 2001 From: krolxon Date: Sat, 1 Jun 2024 15:58:53 +0530 Subject: [PATCH] fix #8 --- src/app.rs | 26 +++++++++++++++++++++++++- src/connection.rs | 5 +++++ src/event/handler.rs | 12 +----------- src/main.rs | 2 +- 4 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/app.rs b/src/app.rs index a76d0cd..06d76ce 100755 --- a/src/app.rs +++ b/src/app.rs @@ -30,6 +30,9 @@ pub struct App { // used to show playlist popup pub playlist_popup: bool, pub append_list: ContentList, + + // Determines if the database should be updated or not + pub should_update_song_list: bool, } #[derive(Debug, PartialEq, Clone)] @@ -67,12 +70,33 @@ impl App { pl_cursor_pos: 0, playlist_popup: false, append_list, + should_update_song_list: false, }) } - pub fn tick(&mut self) { + pub fn tick(&mut self) -> AppResult<()> { self.conn.update_status(); self.update_queue(); + + // Deals with database update + if self.should_update_song_list { + if let None = self.conn.status.updating_db { + // Update the songs list + self.conn.songs_filenames = self + .conn + .conn + .listall()? + .into_iter() + .map(|x| x.file) + .collect(); + + self.browser.update_directory(&mut self.conn)?; + + self.should_update_song_list = false; + } + } + + Ok(()) } pub fn quit(&mut self) { diff --git a/src/connection.rs b/src/connection.rs index 7df0517..d6958c2 100755 --- a/src/connection.rs +++ b/src/connection.rs @@ -18,6 +18,7 @@ pub struct Connection { pub random: bool, pub current_song: Song, pub stats: mpd::Stats, + pub status: mpd::Status, } impl Connection { @@ -61,6 +62,7 @@ impl Connection { random, current_song, stats, + status, }) } @@ -90,6 +92,9 @@ impl Connection { .unwrap_or(empty_song); let stats = self.conn.stats().unwrap_or_default(); + // Status + self.status = status.clone(); + // Playback State self.state = match status.state { State::Stop => "Stopped".to_string(), diff --git a/src/event/handler.rs b/src/event/handler.rs index 29da20c..b8c1a80 100755 --- a/src/event/handler.rs +++ b/src/event/handler.rs @@ -141,17 +141,7 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> { // Update MPD database KeyCode::Char('U') => { app.conn.conn.rescan()?; - - // Update the songs list - app.conn.songs_filenames = app - .conn - .conn - .listall()? - .into_iter() - .map(|x| x.file) - .collect(); - - app.browser.update_directory(&mut app.conn)?; + app.should_update_song_list = true; } // Search for songs diff --git a/src/main.rs b/src/main.rs index 17fd053..24fb3da 100755 --- a/src/main.rs +++ b/src/main.rs @@ -33,7 +33,7 @@ fn main() -> AppResult<()> { while app.running { tui.draw(&mut app)?; match tui.events.next()? { - Event::Tick => app.tick(), + Event::Tick => app.tick()?, Event::Key(key_event) => handler::handle_key_events(key_event, &mut app)?, Event::Mouse(_) => {} Event::Resize(_, _) => {}