From b075c961349ffee2f463884d6596dd983f144600 Mon Sep 17 00:00:00 2001 From: Henrik Friedrichsen Date: Thu, 7 Mar 2019 17:27:52 +0100 Subject: [PATCH] update current_track when tracks before the current one are removed also: don't use events to update the queue UI this makes the Add/Remove queue events useless, but we'll keep them for now hopefully fixes #22 --- src/queue.rs | 10 ++++------ src/ui/queue.rs | 13 +++---------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/src/queue.rs b/src/queue.rs index f1e4180..0e5d8c6 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -43,10 +43,6 @@ impl Queue { } } - pub fn get(&self, index: usize) -> &Track { - &self.queue[index] - } - pub fn get_current(&self) -> Option<&Track> { match self.current_track { Some(index) => Some(&self.queue[index]), @@ -88,8 +84,10 @@ impl Queue { // the same index again, because the next track is now at the position // of the one we deleted if let Some(current_track) = self.current_track { - if current_track == index { + if index == current_track { self.play(index); + } else if index < current_track { + self.current_track = Some(current_track - 1); } } } @@ -107,8 +105,8 @@ impl Queue { } pub fn stop(&mut self) { - self.spotify.stop(); self.current_track = None; + self.spotify.stop(); } pub fn next(&mut self) { diff --git a/src/ui/queue.rs b/src/ui/queue.rs index 56f368c..d82a328 100644 --- a/src/ui/queue.rs +++ b/src/ui/queue.rs @@ -32,9 +32,10 @@ impl QueueView { fn cb_delete(cursive: &mut Cursive, queue: &mut Queue) { let view_ref: Option> = cursive.find_id("queue_list"); - if let Some(queuelist) = view_ref { + if let Some(mut queuelist) = view_ref { let index = queuelist.get_focus_index(); queue.remove(index); + queuelist.remove_child(index); } } @@ -50,16 +51,8 @@ impl QueueView { let view_ref: Option> = cursive.find_id("queue_list"); if let Some(mut queuelist) = view_ref { match ev { - QueueEvent::Add(index) => { - let queue = self.queue.lock().expect("could not lock queue"); - let track = queue.get(index); - let button = self.create_button(&track); - queuelist.insert_child(index, button); - } - QueueEvent::Remove(index) => { - queuelist.remove_child(index); - } QueueEvent::Show => self.populate(&mut queuelist), + _ => (), } } }