diff --git a/hammond-gtk/src/widgets/episode.rs b/hammond-gtk/src/widgets/episode.rs index f0ce02e..19694bb 100644 --- a/hammond-gtk/src/widgets/episode.rs +++ b/hammond-gtk/src/widgets/episode.rs @@ -352,7 +352,7 @@ fn total_size_helper( // } pub fn episodes_listbox(pd: Arc, sender: Sender) -> Result { - // use crossbeam_channel::TryRecvError::*; + use crossbeam_channel::TryRecvError::*; use crossbeam_channel::bounded; let count = dbqueries::get_pd_episodes_count(&pd)?; @@ -376,23 +376,27 @@ pub fn episodes_listbox(pd: Arc, sender: Sender) -> Result e, - // Err(Empty) => return glib::Continue(true), - // Err(Disconnected) => return glib::Continue(false), - // }; - - let mut idx = 0; 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 widget = EpisodeWidget::new(ep, sender.clone()); - list.add(&widget.container); - }); + let mut idx = 0; + gtk::idle_add(clone!(list, sender => move || { + if idx >= episodes.len() { return glib::Continue(false) } - idx += 1; - glib::Continue(true) + episodes.get(idx).cloned().map(|ep| { + let widget = EpisodeWidget::new(ep, sender.clone()); + list.add(&widget.container); + }); + + idx += 1; + glib::Continue(true) + })); + + glib::Continue(false) })); Ok(list)