diff --git a/hammond-gtk/resources/gtk/show_widget.ui b/hammond-gtk/resources/gtk/show_widget.ui index fca068c..4e71bf5 100644 --- a/hammond-gtk/resources/gtk/show_widget.ui +++ b/hammond-gtk/resources/gtk/show_widget.ui @@ -266,4 +266,29 @@ Tobias Bernard + + False + bottom + + + True + False + vertical + + + True + True + True + Mark all epiodes as Watched + True + + + False + True + 0 + + + + + diff --git a/hammond-gtk/src/widgets/show.rs b/hammond-gtk/src/widgets/show.rs index 0a5808d..2805907 100644 --- a/hammond-gtk/src/widgets/show.rs +++ b/hammond-gtk/src/widgets/show.rs @@ -62,6 +62,8 @@ impl ShowWidget { } pub fn init(&self, pd: Arc, sender: Sender) { + let builder = gtk::Builder::new_from_resource("/org/gnome/hammond/gtk/show_widget.ui"); + // Hacky workaround so the pd.id() can be retrieved from the `ShowStack`. WidgetExt::set_name(&self.container, &pd.id().to_string()); @@ -88,6 +90,16 @@ impl ShowWidget { error!("Error: {}", err); } }); + + let show_menu: gtk::Popover = builder.get_object("show_menu").unwrap(); + let mark_all: gtk::ModelButton = builder.get_object("mark_all_watched").unwrap(); + + mark_all.connect_clicked(clone!(pd, sender => move |_| { + if let Err(err) = on_played_button_clicked(&pd, sender.clone()) { + error!("Failed to mark all episodes as watched: {}", err); + } + })); + self.settings.set_popover(&show_menu); } /// Populate the listbox with the shows episodes. @@ -142,7 +154,6 @@ fn on_unsub_button_clicked( Ok(()) } -#[allow(dead_code)] fn on_played_button_clicked(pd: &Podcast, sender: Sender) -> Result<(), Error> { dbqueries::update_none_to_played_now(pd)?; sender.send(Action::RefreshWidget)?;