diff --git a/hammond-gtk/resources/gtk/headerbar.ui b/hammond-gtk/resources/gtk/headerbar.ui index 0801116..dfcc7db 100644 --- a/hammond-gtk/resources/gtk/headerbar.ui +++ b/hammond-gtk/resources/gtk/headerbar.ui @@ -249,6 +249,7 @@ True True True + app.update Check for new episodes diff --git a/hammond-gtk/src/app.rs b/hammond-gtk/src/app.rs index 3bd0e50..01242e7 100644 --- a/hammond-gtk/src/app.rs +++ b/hammond-gtk/src/app.rs @@ -2,8 +2,7 @@ use gtk; use glib; use gio; use gtk::prelude::*; -use gio::ApplicationExtManual; -use gio::ApplicationExt; +use gio::{ActionMapExt, ApplicationExt, ApplicationExtManual, SimpleActionExt}; use hammond_data::utils::checkup; @@ -64,13 +63,23 @@ impl App { } } - pub fn run(&self) { - let window = self.window.clone(); - let app = self.app_instance.clone(); - self.app_instance.connect_startup(move |_| { - build_ui(&window, &app); + pub fn setup_actions(&self) { + let update = gio::SimpleAction::new("update", None); + let content = self.content.clone(); + update.connect_activate(move |_, _| { + utils::refresh_feed(content.clone(), None); }); + self.app_instance.add_action(&update); + let refresh = gio::SimpleAction::new("refresh", None); + let content = self.content.clone(); + update.connect_activate(move |_, _| { + content.update(); + }); + self.app_instance.add_action(&refresh); + } + + pub fn setup_timed_callbacks(&self) { let content = self.content.clone(); // Update 30 seconds after the Application is initialized. gtk::timeout_add_seconds( @@ -98,6 +107,16 @@ impl App { let _ = checkup(); glib::Continue(false) }); + } + + pub fn run(&self) { + let window = self.window.clone(); + let app = self.app_instance.clone(); + self.app_instance.connect_startup(move |_| { + build_ui(&window, &app); + }); + self.setup_timed_callbacks(); + self.setup_actions(); ApplicationExtManual::run(&self.app_instance, &[]); } diff --git a/hammond-gtk/src/headerbar.rs b/hammond-gtk/src/headerbar.rs index f811324..cc99eb7 100644 --- a/hammond-gtk/src/headerbar.rs +++ b/hammond-gtk/src/headerbar.rs @@ -56,7 +56,6 @@ impl Header { let menu_popover: gtk::PopoverMenu = builder.get_object("menu_popover").unwrap(); let new_url: gtk::Entry = builder.get_object("new_url").unwrap(); let add_button: gtk::Button = builder.get_object("add_button").unwrap(); - let refresh_button: gtk::Button = builder.get_object("refresh_button").unwrap(); self.switch.set_stack(&content.get_stack()); new_url.connect_changed(move |url| { @@ -71,10 +70,6 @@ impl Header { add_popover.hide(); })); - refresh_button.connect_clicked(clone!(content => move |_| { - utils::refresh_feed(content.clone(), None); - })); - self.add_toggle.set_popover(&add_popover); self.menu_toggle.set_popover(&menu_popover); diff --git a/hammond-gtk/src/utils.rs b/hammond-gtk/src/utils.rs index cd77c1a..7bb3853 100644 --- a/hammond-gtk/src/utils.rs +++ b/hammond-gtk/src/utils.rs @@ -45,11 +45,11 @@ pub fn refresh_feed(content: Rc, source: Option>) { }; sender.send(true).expect("Couldn't send data to channel");; - glib::idle_add(refresh_podcasts_view); + glib::idle_add(refresh_everything); }); } -fn refresh_podcasts_view() -> glib::Continue { +fn refresh_everything() -> glib::Continue { GLOBAL.with(|global| { if let Some((ref content, ref reciever)) = *global.borrow() { if reciever.try_recv().is_ok() {