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

@@ -33,32 +33,34 @@ impl QueueView {
}
pub fn redraw(&self, s: &mut Cursive) {
let mut queuelist: ViewRef<ListView> = s.find_id("queue_list").unwrap();
queuelist.clear();
let view_ref: Option<ViewRef<ListView>> = s.find_id("queue_list");
if let Some(mut queuelist) = view_ref {
queuelist.clear();
let queue_ref = self.queue.clone();
let queue = self.queue.lock().unwrap();
for (index, track) in queue.iter().enumerate() {
let artists = track
.artists
.iter()
.map(|ref artist| artist.name.clone())
.collect::<Vec<String>>()
.join(", ");
let formatted = format!("{} - {}", artists, track.name);
let queue_ref = self.queue.clone();
let queue = self.queue.lock().unwrap();
for (index, track) in queue.iter().enumerate() {
let artists = track
.artists
.iter()
.map(|ref artist| artist.name.clone())
.collect::<Vec<String>>()
.join(", ");
let formatted = format!("{} - {}", artists, track.name);
let trackid = SpotifyId::from_base62(&track.id).expect("could not load track");
let s = self.spotify.clone();
let trackid = SpotifyId::from_base62(&track.id).expect("could not load track");
let s = self.spotify.clone();
let queue_ref = queue_ref.clone();
let button = Button::new_raw(formatted, move |_cursive| {
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);
let queue_ref = queue_ref.clone();
let button = Button::new_raw(formatted, move |_cursive| {
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);
}
}
}
}