aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkrolxon <krolyxon@tutanota.com>2024-06-01 15:58:53 +0530
committerkrolxon <krolyxon@tutanota.com>2024-06-01 15:58:53 +0530
commitdc3f561de36fdfc283ebe0b6cf49f09f3bdc9282 (patch)
tree84dfc38712a631f57450da63351fa946689a4da1 /src
parent311cbc26318ef81e1b7c697e11098fb6b642fd2c (diff)
fix #8
Diffstat (limited to 'src')
-rwxr-xr-xsrc/app.rs26
-rwxr-xr-xsrc/connection.rs5
-rwxr-xr-xsrc/event/handler.rs12
-rwxr-xr-xsrc/main.rs2
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<String>,
+
+ // 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(_, _) => {}