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
This commit is contained in:
Henrik Friedrichsen
2019-03-07 17:27:52 +01:00
parent 41164df2be
commit b075c96134
2 changed files with 7 additions and 16 deletions

View File

@@ -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) {

View File

@@ -32,9 +32,10 @@ impl QueueView {
fn cb_delete(cursive: &mut Cursive, queue: &mut Queue) {
let view_ref: Option<ViewRef<LinearLayout>> = 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<ViewRef<LinearLayout>> = 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),
_ => (),
}
}
}