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:
10
src/queue.rs
10
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> {
|
pub fn get_current(&self) -> Option<&Track> {
|
||||||
match self.current_track {
|
match self.current_track {
|
||||||
Some(index) => Some(&self.queue[index]),
|
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
|
// the same index again, because the next track is now at the position
|
||||||
// of the one we deleted
|
// of the one we deleted
|
||||||
if let Some(current_track) = self.current_track {
|
if let Some(current_track) = self.current_track {
|
||||||
if current_track == index {
|
if index == current_track {
|
||||||
self.play(index);
|
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) {
|
pub fn stop(&mut self) {
|
||||||
self.spotify.stop();
|
|
||||||
self.current_track = None;
|
self.current_track = None;
|
||||||
|
self.spotify.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn next(&mut self) {
|
pub fn next(&mut self) {
|
||||||
|
|||||||
@@ -32,9 +32,10 @@ impl QueueView {
|
|||||||
|
|
||||||
fn cb_delete(cursive: &mut Cursive, queue: &mut Queue) {
|
fn cb_delete(cursive: &mut Cursive, queue: &mut Queue) {
|
||||||
let view_ref: Option<ViewRef<LinearLayout>> = cursive.find_id("queue_list");
|
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();
|
let index = queuelist.get_focus_index();
|
||||||
queue.remove(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");
|
let view_ref: Option<ViewRef<LinearLayout>> = cursive.find_id("queue_list");
|
||||||
if let Some(mut queuelist) = view_ref {
|
if let Some(mut queuelist) = view_ref {
|
||||||
match ev {
|
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),
|
QueueEvent::Show => self.populate(&mut queuelist),
|
||||||
|
_ => (),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user