diff --git a/src/window.rs b/src/window.rs index cd61845..8139c95 100644 --- a/src/window.rs +++ b/src/window.rs @@ -648,7 +648,11 @@ pub mod imp { let Some(api) = api else { return }; // Reload filter rules on every refresh so edits take effect immediately. - *self.filter_rules.borrow_mut() = crate::filters::load_rules(); + let filter_text = { + let settings = gio::Settings::new("net.jeena.FeedTheMonkey"); + settings.string("content-filters").to_string() + }; + *self.filter_rules.borrow_mut() = crate::filters::parse(&filter_text); self.refresh_stack.set_visible_child_name("spinner"); self.content_refresh_stack.set_visible_child_name("spinner"); @@ -675,6 +679,17 @@ pub mod imp { crate::pending_actions::flush(&api, wt).await; } let articles = api.fetch_unread().await?; + // Apply filters before image-cache processing so that rules + // such as /thumbs/ → / rewrite the original URLs before they + // are percent-encoded into feedthemonkey-img:// scheme URIs. + let rules = crate::filters::parse(&filter_text); + let articles: Vec<_> = articles + .into_iter() + .map(|mut a| { + a.content = crate::filters::apply(&rules, &a.id, &a.link, &a.content); + a + }) + .collect(); let articles = if cache_images { let processed = crate::image_cache::process(articles); crate::runtime::spawn_bg(crate::image_cache::prefetch(processed.clone()));