From 74a6e5814abeb082314e73fcbed09171e7012bfd Mon Sep 17 00:00:00 2001 From: Jordan Petridis Date: Thu, 21 Dec 2017 15:14:29 +0200 Subject: [PATCH] ShowWidget: Update EpisodesView when unsub button is activated. --- hammond-gtk/src/content.rs | 20 ++++++++++++-------- hammond-gtk/src/widgets/show.rs | 32 +++++++++++++++++++++++++------- 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/hammond-gtk/src/content.rs b/hammond-gtk/src/content.rs index 49ed951..5181a91 100644 --- a/hammond-gtk/src/content.rs +++ b/hammond-gtk/src/content.rs @@ -23,8 +23,8 @@ pub struct Content { impl Content { pub fn new(header: Rc
) -> Rc { let stack = gtk::Stack::new(); - let shows = ShowStack::new(header); let episodes = EpisodeStack::new(); + let shows = ShowStack::new(header, episodes.clone()); stack.add_titled(&episodes.stack, "episodes", "Episodes"); stack.add_titled(&shows.stack, "shows", "Shows"); @@ -50,15 +50,17 @@ impl Content { pub struct ShowStack { pub stack: gtk::Stack, header: Rc
, + epstack: Rc, } impl ShowStack { - fn new(header: Rc
) -> Rc { + fn new(header: Rc
, epstack: Rc) -> Rc { let stack = gtk::Stack::new(); let show = Rc::new(ShowStack { stack, header: header.clone(), + epstack, }); let pop = ShowsPopulated::new(show.clone(), header); @@ -110,7 +112,12 @@ impl ShowStack { pub fn replace_widget(&self, pd: &Podcast) { let old = self.stack.get_child_by_name("widget").unwrap(); - let new = ShowWidget::new(Rc::new(self.clone()), self.header.clone(), pd); + let new = ShowWidget::new( + Rc::new(self.clone()), + self.epstack.clone(), + self.header.clone(), + pd, + ); self.stack.remove(&old); self.stack.add_named(&new.container, "widget"); @@ -145,10 +152,7 @@ impl ShowStack { } #[derive(Debug, Clone)] -struct RecentEpisodes; - -#[derive(Debug, Clone)] -struct EpisodeStack { +pub struct EpisodeStack { // populated: RecentEpisodes, // empty: EmptyView, stack: gtk::Stack, @@ -172,7 +176,7 @@ impl EpisodeStack { }) } - fn update(&self) { + pub fn update(&self) { let old = self.stack.get_child_by_name("episodes").unwrap(); let eps = EpisodesView::new(); diff --git a/hammond-gtk/src/widgets/show.rs b/hammond-gtk/src/widgets/show.rs index 54b9840..66da950 100644 --- a/hammond-gtk/src/widgets/show.rs +++ b/hammond-gtk/src/widgets/show.rs @@ -11,7 +11,7 @@ use hammond_downloader::downloader; use widgets::episode::episodes_listbox; use utils::get_pixbuf_from_path; -use content::ShowStack; +use content::{EpisodeStack, ShowStack}; use headerbar::Header; use std::rc::Rc; @@ -53,18 +53,30 @@ impl Default for ShowWidget { } impl ShowWidget { - pub fn new(shows: Rc, header: Rc
, pd: &Podcast) -> ShowWidget { + pub fn new( + shows: Rc, + epstack: Rc, + header: Rc
, + pd: &Podcast, + ) -> ShowWidget { let pdw = ShowWidget::default(); - pdw.init(shows, header, pd); + pdw.init(shows, epstack, header, pd); pdw } - pub fn init(&self, shows: Rc, header: Rc
, pd: &Podcast) { + pub fn init( + &self, + shows: Rc, + epstack: Rc, + header: Rc
, + pd: &Podcast, + ) { WidgetExt::set_name(&self.container, &pd.id().to_string()); // TODO: should spawn a thread to avoid locking the UI probably. - self.unsub.connect_clicked(clone!(shows, pd => move |bttn| { - on_unsub_button_clicked(shows.clone(), &pd, bttn); + self.unsub + .connect_clicked(clone!(shows, epstack, pd => move |bttn| { + on_unsub_button_clicked(shows.clone(), epstack.clone(), &pd, bttn); header.switch_to_normal(); })); @@ -94,7 +106,12 @@ impl ShowWidget { } } -fn on_unsub_button_clicked(shows: Rc, pd: &Podcast, unsub_button: >k::Button) { +fn on_unsub_button_clicked( + shows: Rc, + epstack: Rc, + pd: &Podcast, + unsub_button: >k::Button, +) { let res = dbqueries::remove_feed(pd); if res.is_ok() { info!("{} was removed succesfully.", pd.title()); @@ -112,6 +129,7 @@ fn on_unsub_button_clicked(shows: Rc, pd: &Podcast, unsub_button: > } shows.switch_podcasts_animated(); shows.update_podcasts(); + epstack.update(); } #[allow(dead_code)]