diff --git a/src/events.rs b/src/events.rs index 10718fd..a001a05 100644 --- a/src/events.rs +++ b/src/events.rs @@ -7,6 +7,7 @@ pub enum Event { pub type EventSender = Sender; +#[derive(Clone)] pub struct EventManager { tx: EventSender, rx: Receiver, @@ -28,8 +29,9 @@ impl EventManager { self.rx.try_iter() } - pub fn sink(&mut self) -> EventSender { - self.tx.clone() + pub fn send(&self, event: Event) { + self.tx.send(event); + self.trigger(); } pub fn trigger(&self) { diff --git a/src/main.rs b/src/main.rs index 7f7f7d8..2de71f9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -84,7 +84,7 @@ fn main() { }; let cfg = config::load(path.to_str().unwrap()).expect("could not load configuration file"); - let queue = Arc::new(Mutex::new(queue::Queue::new(event_manager.sink()))); + let queue = Arc::new(Mutex::new(queue::Queue::new(event_manager.clone()))); let spotify = Arc::new(spotify::Spotify::new( cfg.username, @@ -115,10 +115,10 @@ fn main() { }); { - let event_sink = event_manager.sink(); + let event_manager = event_manager.clone(); cursive.add_global_callback(Key::F2, move |s| { s.set_screen(queuescreen); - event_sink.send(Event::QueueUpdate); + event_manager.clone().send(Event::QueueUpdate); }); } diff --git a/src/queue.rs b/src/queue.rs index eea2253..bb2d7d8 100644 --- a/src/queue.rs +++ b/src/queue.rs @@ -3,22 +3,22 @@ use std::collections::VecDeque; use rspotify::spotify::model::track::FullTrack; -use events::{Event, EventSender}; +use events::{Event, EventManager}; pub struct Queue { queue: VecDeque, - ev_sink: EventSender, + ev: EventManager, } impl Queue { - pub fn new(ev_sink: EventSender) -> Queue { + pub fn new(ev: EventManager) -> Queue { Queue { queue: VecDeque::new(), - ev_sink: ev_sink, + ev: ev, } } fn send_event(&self) { - self.ev_sink.send(Event::QueueUpdate); + self.ev.send(Event::QueueUpdate); } pub fn remove(&mut self, index: usize) -> Option { match self.queue.remove(index) { diff --git a/src/ui/queue.rs b/src/ui/queue.rs index b2af0f4..596f70b 100644 --- a/src/ui/queue.rs +++ b/src/ui/queue.rs @@ -56,8 +56,6 @@ impl QueueView { s.load(trackid); s.play(); queue_ref.lock().unwrap().remove(index); - // TODO: update view representation, preferably, queue changes - // cause a view refresh }); queuelist.add_child("", button); }