EpisodesListBox: Do not block while fetching episode backlog.

This commit is contained in:
Jordan Petridis 2018-04-06 01:36:43 +03:00 committed by Merge Bot, Bors Wannabe
parent 701b759ba2
commit cc84a4637d

View File

@ -352,7 +352,7 @@ fn total_size_helper(
// } // }
pub fn episodes_listbox(pd: Arc<Podcast>, sender: Sender<Action>) -> Result<gtk::ListBox, Error> { pub fn episodes_listbox(pd: Arc<Podcast>, sender: Sender<Action>) -> Result<gtk::ListBox, Error> {
// use crossbeam_channel::TryRecvError::*; use crossbeam_channel::TryRecvError::*;
use crossbeam_channel::bounded; use crossbeam_channel::bounded;
let count = dbqueries::get_pd_episodes_count(&pd)?; let count = dbqueries::get_pd_episodes_count(&pd)?;
@ -376,23 +376,27 @@ pub fn episodes_listbox(pd: Arc<Podcast>, sender: Sender<Action>) -> Result<gtk:
return Ok(list); return Ok(list);
} }
let episodes = receiver.recv().unwrap();
// Ok(e) => e,
// Err(Empty) => return glib::Continue(true),
// Err(Disconnected) => return glib::Continue(false),
// };
let mut idx = 0;
gtk::idle_add(clone!(list => move || { gtk::idle_add(clone!(list => move || {
if idx >= episodes.len() { return glib::Continue(false) } let episodes = match receiver.try_recv() {
Ok(e) => e,
Err(Empty) => return glib::Continue(true),
Err(Disconnected) => return glib::Continue(false),
};
episodes.get(idx).cloned().map(|ep| { let mut idx = 0;
let widget = EpisodeWidget::new(ep, sender.clone()); gtk::idle_add(clone!(list, sender => move || {
list.add(&widget.container); if idx >= episodes.len() { return glib::Continue(false) }
});
idx += 1; episodes.get(idx).cloned().map(|ep| {
glib::Continue(true) let widget = EpisodeWidget::new(ep, sender.clone());
list.add(&widget.container);
});
idx += 1;
glib::Continue(true)
}));
glib::Continue(false)
})); }));
Ok(list) Ok(list)