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() {