diff --git a/src/window.rs b/src/window.rs index 91181c8..f4905d5 100644 --- a/src/window.rs +++ b/src/window.rs @@ -101,6 +101,14 @@ pub mod imp { }); klass.install_action("win.preferences", None, |win, _, _| { let dialog = crate::preferences_dialog::PreferencesDialog::new(); + let win_weak = win.downgrade(); + dialog.connect_closed(move |_| { + if let Some(win) = win_weak.upgrade() { + let imp = win.imp(); + *imp.filter_rules.borrow_mut() = crate::filters::load_rules(); + imp.reload_current_article(); + } + }); dialog.present(Some(win.upcast_ref::())); }); } @@ -234,6 +242,21 @@ pub mod imp { obj.set_unread(false); } + fn reload_current_article(&self) { + let id = self.current_article_id.borrow().clone(); + let Some(id) = id else { return }; + if let Some(store) = self.article_store.borrow().as_ref() { + for i in 0..store.n_items() { + if let Some(obj) = store.item(i).and_downcast::() { + if obj.article().id == id { + self.load_article_in_webview(&obj.article().clone()); + break; + } + } + } + } + } + fn load_article_in_webview(&self, article: &crate::model::Article) { let rules = self.filter_rules.borrow(); let content = crate::filters::apply(&rules, &article.id, &article.link, &article.content);