introduce global event sink to trigger updates across threads
This commit is contained in:
26
src/queue.rs
26
src/queue.rs
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user