Files
ncspot/src/events.rs
Henrik Friedrichsen 0eea154400 update dependencies
2019-10-09 22:48:17 +02:00

46 lines
970 B
Rust

use crossbeam_channel::{unbounded, Receiver, Sender, TryIter};
use cursive::{CbSink, Cursive};
use spotify::PlayerEvent;
pub enum Event {
Player(PlayerEvent),
}
pub type EventSender = Sender<Event>;
#[derive(Clone)]
pub struct EventManager {
tx: EventSender,
rx: Receiver<Event>,
cursive_sink: CbSink,
}
impl EventManager {
pub fn new(cursive_sink: CbSink) -> EventManager {
let (tx, rx) = unbounded();
EventManager {
tx,
rx,
cursive_sink,
}
}
pub fn msg_iter(&self) -> TryIter<Event> {
self.rx.try_iter()
}
pub fn send(&self, event: Event) {
self.tx.send(event).expect("could not send event");
self.trigger();
}
pub fn trigger(&self) {
// send a no-op to trigger event loop processing
self.cursive_sink
.send(Box::new(Cursive::noop))
.expect("could not send no-op event to cursive");
}
}