more refined queue events + playlist delete binding

- move from listview to linearlayout + scrollview
- doesn't redraw the whole view on queue changes anymore
- uses new cursive functions for linearlayout (needs cursive git)

closes #3
This commit is contained in:
Henrik Friedrichsen
2019-03-04 00:56:34 +01:00
parent 38592e3a4c
commit 9507add6a4
5 changed files with 105 additions and 42 deletions

View File

@@ -10,6 +10,13 @@ pub struct Queue {
ev: EventManager,
}
pub enum QueueChange {
Dequeue,
Enqueue,
Remove(usize),
Show,
}
impl Queue {
pub fn new(ev: EventManager) -> Queue {
Queue {
@@ -17,14 +24,11 @@ impl Queue {
ev: ev,
}
}
fn send_event(&self) {
self.ev.send(Event::QueueUpdate);
}
pub fn remove(&mut self, index: usize) -> Option<FullTrack> {
match self.queue.remove(index) {
Some(track) => {
debug!("Removed from queue: {}", &track.name);
self.send_event();
self.ev.send(Event::Queue(QueueChange::Remove(index)));
Some(track)
}
None => None,
@@ -33,18 +37,21 @@ impl Queue {
pub fn enqueue(&mut self, track: FullTrack) {
debug!("Queued: {}", &track.name);
self.queue.push_back(track);
self.send_event();
self.ev.send(Event::Queue(QueueChange::Enqueue));
}
pub fn dequeue(&mut self) -> Option<FullTrack> {
match self.queue.pop_front() {
Some(track) => {
debug!("Dequeued : {}", track.name);
self.send_event();
self.ev.send(Event::Queue(QueueChange::Dequeue));
Some(track)
}
None => None,
}
}
pub fn peek(&self) -> Option<&FullTrack> {
self.queue.get(0)
}
pub fn iter(&self) -> Iter<FullTrack> {
self.queue.iter()
}