always trigger a cursive event when a queue event is generated
This commit is contained in:
@@ -7,6 +7,7 @@ pub enum Event {
|
||||
|
||||
pub type EventSender = Sender<Event>;
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct EventManager {
|
||||
tx: EventSender,
|
||||
rx: Receiver<Event>,
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
10
src/queue.rs
10
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<FullTrack>,
|
||||
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<FullTrack> {
|
||||
match self.queue.remove(index) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user