introduce global event sink to trigger updates across threads

This commit is contained in:
Henrik Friedrichsen
2019-02-27 22:50:31 +01:00
parent f21e3b0bca
commit d3c439342a
5 changed files with 113 additions and 31 deletions

View File

@@ -3,24 +3,44 @@ use std::collections::VecDeque;
use rspotify::spotify::model::track::FullTrack;
use events::{Event, EventSender};
pub struct Queue {
queue: VecDeque<FullTrack>,
ev_sink: EventSender,
}
impl Queue {
pub fn new() -> Queue {
pub fn new(ev_sink: EventSender) -> Queue {
Queue {
queue: VecDeque::new(),
ev_sink: ev_sink,
}
}
fn send_event(&self) {
self.ev_sink.send(Event::QueueUpdate);
}
pub fn remove(&mut self, index: usize) -> Option<FullTrack> {
self.queue.remove(index)
match self.queue.remove(index) {
Some(track) => {
self.send_event();
Some(track)
},
None => None
}
}
pub fn enqueue(&mut self, track: FullTrack) {
self.queue.push_back(track);
self.send_event();
}
pub fn dequeue(&mut self) -> Option<FullTrack> {
self.queue.pop_front()
match self.queue.pop_front() {
Some(track) => {
self.send_event();
Some(track)
},
None => None
}
}
pub fn iter(&self) -> Iter<FullTrack> {
self.queue.iter()