diff --git a/hammond-gtk/resources/gtk/show_widget.ui b/hammond-gtk/resources/gtk/show_widget.ui
index 01725ae..1bc45e7 100644
--- a/hammond-gtk/resources/gtk/show_widget.ui
+++ b/hammond-gtk/resources/gtk/show_widget.ui
@@ -151,7 +151,6 @@
True
center
center
- app.refresh
diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs
index 1934244..d9c29b5 100644
--- a/hammond-gtk/src/app.rs
+++ b/hammond-gtk/src/app.rs
@@ -18,6 +18,8 @@ use std::time::Duration;
#[derive(Clone, Debug)]
pub enum Action {
UpdateSources(Option),
+ RefreshViews,
+ RefreshEpisodesView,
}
#[derive(Debug)]
@@ -57,7 +59,7 @@ impl App {
let header = Rc::new(Header::default());
// Create a content instance
- let content = Content::new(header.clone());
+ let content = Content::new(header.clone(), sender.clone());
// Initialize the headerbar
header.init(content.clone(), sender.clone());
@@ -164,6 +166,12 @@ impl App {
utils::refresh_feed(content.clone(), headerbar.clone(), Some(vec!(s)))
}
}
+ Ok(Action::RefreshViews) => {
+ content.update();
+ }
+ Ok(Action::RefreshEpisodesView) => {
+ content.update_episode_view();
+ }
_ => (),
}
diff --git a/hammond-gtk/src/content.rs b/hammond-gtk/src/content.rs
index 6293d59..2e0161d 100644
--- a/hammond-gtk/src/content.rs
+++ b/hammond-gtk/src/content.rs
@@ -10,21 +10,24 @@ use views::episodes::EpisodesView;
use widgets::show::ShowWidget;
use headerbar::Header;
+use app::Action;
use std::rc::Rc;
+use std::sync::mpsc::Sender;
#[derive(Debug, Clone)]
pub struct Content {
stack: gtk::Stack,
shows: Rc,
episodes: Rc,
+ sender: Sender,
}
impl Content {
- pub fn new(header: Rc) -> Rc {
+ pub fn new(header: Rc, sender: Sender) -> Rc {
let stack = gtk::Stack::new();
let episodes = EpisodeStack::new();
- let shows = ShowStack::new(header, episodes.clone());
+ let shows = ShowStack::new(header, episodes.clone(), sender.clone());
stack.add_titled(&episodes.stack, "episodes", "Episodes");
stack.add_titled(&shows.stack, "shows", "Shows");
@@ -33,6 +36,7 @@ impl Content {
stack,
shows,
episodes,
+ sender,
})
}
@@ -63,16 +67,18 @@ pub struct ShowStack {
stack: gtk::Stack,
header: Rc,
epstack: Rc,
+ sender: Sender,
}
impl ShowStack {
- fn new(header: Rc, epstack: Rc) -> Rc {
+ fn new(header: Rc, epstack: Rc, sender: Sender) -> Rc {
let stack = gtk::Stack::new();
let show = Rc::new(ShowStack {
stack,
header: header.clone(),
epstack,
+ sender,
});
let pop = ShowsPopulated::new(show.clone(), header);
@@ -124,7 +130,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.header.clone(),
+ pd,
+ self.sender.clone(),
+ );
self.stack.remove(&old);
self.stack.add_named(&new.container, "widget");
diff --git a/hammond-gtk/src/widgets/show.rs b/hammond-gtk/src/widgets/show.rs
index df57fd6..a7ce989 100644
--- a/hammond-gtk/src/widgets/show.rs
+++ b/hammond-gtk/src/widgets/show.rs
@@ -13,8 +13,10 @@ use widgets::episode::episodes_listbox;
use utils::get_pixbuf_from_path;
use content::ShowStack;
use headerbar::Header;
+use app::Action;
use std::rc::Rc;
+use std::sync::mpsc::Sender;
use std::fs;
#[derive(Debug, Clone)]
@@ -53,18 +55,30 @@ impl Default for ShowWidget {
}
impl ShowWidget {
- pub fn new(shows: Rc, header: Rc, pd: &Podcast) -> ShowWidget {
+ pub fn new(
+ shows: Rc,
+ header: Rc,
+ pd: &Podcast,
+ sender: Sender,
+ ) -> ShowWidget {
let pdw = ShowWidget::default();
- pdw.init(shows, header, pd);
+ pdw.init(shows, header, pd, sender);
pdw
}
- pub fn init(&self, shows: Rc, header: Rc, pd: &Podcast) {
+ pub fn init(
+ &self,
+ shows: Rc,
+ header: Rc,
+ pd: &Podcast,
+ sender: Sender,
+ ) {
// Hacky workaround so the pd.id() can be retrieved from the `ShowStack`.
WidgetExt::set_name(&self.container, &pd.id().to_string());
- self.unsub.connect_clicked(clone!(shows, pd => move |bttn| {
- on_unsub_button_clicked(shows.clone(), &pd, bttn);
+ self.unsub
+ .connect_clicked(clone!(shows, pd, sender => move |bttn| {
+ on_unsub_button_clicked(shows.clone(), &pd, bttn, sender.clone());
header.switch_to_normal();
}));
@@ -104,7 +118,12 @@ impl ShowWidget {
}
}
-fn on_unsub_button_clicked(shows: Rc, pd: &Podcast, unsub_button: >k::Button) {
+fn on_unsub_button_clicked(
+ shows: Rc,
+ pd: &Podcast,
+ unsub_button: >k::Button,
+ sender: Sender,
+) {
let res = dbqueries::remove_feed(pd);
if res.is_ok() {
info!("{} was removed succesfully.", pd.title());
@@ -120,6 +139,7 @@ fn on_unsub_button_clicked(shows: Rc, pd: &Podcast, unsub_button: >
}
};
}
+ sender.send(Action::RefreshViews).unwrap();
shows.switch_podcasts_animated();
}