diff --git a/Cargo.lock b/Cargo.lock
index 0f157f3..746b7a5 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -2,6 +2,15 @@
# It is not intended for manual editing.
version = 4
+[[package]]
+name = "aho-corasick"
+version = "1.1.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ddd31a130427c27518df266943a5308ed92d4b226cc639f5a8f1002816174301"
+dependencies = [
+ "memchr",
+]
+
[[package]]
name = "atomic-waker"
version = "1.1.2"
@@ -129,6 +138,7 @@ dependencies = [
"gtk4",
"libadwaita",
"libsecret",
+ "regex",
"reqwest",
"serde",
"serde_json",
@@ -1113,6 +1123,35 @@ dependencies = [
"bitflags",
]
+[[package]]
+name = "regex"
+version = "1.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e10754a14b9137dd7b1e3e5b0493cc9171fdd105e0ab477f51b72e7f3ac0e276"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-automata",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-automata"
+version = "0.4.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e1dd4122fc1595e8162618945476892eefca7b88c52820e74af6262213cae8f"
+dependencies = [
+ "aho-corasick",
+ "memchr",
+ "regex-syntax",
+]
+
+[[package]]
+name = "regex-syntax"
+version = "0.8.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc897dd8d9e8bd1ed8cdad82b5966c3e0ecae09fb1907d58efaa013543185d0a"
+
[[package]]
name = "reqwest"
version = "0.12.28"
diff --git a/Cargo.toml b/Cargo.toml
index f2dc074..63a62de 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -14,6 +14,7 @@ webkit6 = { version = "0.6" }
gio = { version = "0.22" }
glib = { version = "0.22" }
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "json"] }
+regex = "1"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["full"] }
diff --git a/data/net.jeena.FeedTheMonkey.gschema.xml b/data/net.jeena.FeedTheMonkey.gschema.xml
index 16ae75d..a69cb8a 100644
--- a/data/net.jeena.FeedTheMonkey.gschema.xml
+++ b/data/net.jeena.FeedTheMonkey.gschema.xml
@@ -25,5 +25,9 @@
''
Content rewrite rules, one per line: domain from to [from to …]
+
+ true
+ Download and cache article images for offline reading (skipped on metered connections)
+
diff --git a/data/ui/preferences_dialog.blp b/data/ui/preferences_dialog.blp
index 94fe343..de20a03 100644
--- a/data/ui/preferences_dialog.blp
+++ b/data/ui/preferences_dialog.blp
@@ -11,6 +11,15 @@ template $PreferencesDialog : Adw.Dialog {
Adw.HeaderBar {}
Adw.PreferencesPage {
+ Adw.PreferencesGroup {
+ title: _("Images");
+
+ Adw.SwitchRow cache_images_row {
+ title: _("Cache Images");
+ subtitle: _("Download images for offline reading (skipped on metered connections)");
+ }
+ }
+
Adw.PreferencesGroup {
title: _("Content Filters");
description: _("One rule per line: domain find replace [find replace …]\n\nExample:\n www.imycomic.com -150x150.jpg .jpg");
diff --git a/data/ui/preferences_dialog.ui b/data/ui/preferences_dialog.ui
index 6fefaad..0e78a1f 100644
--- a/data/ui/preferences_dialog.ui
+++ b/data/ui/preferences_dialog.ui
@@ -17,6 +17,17 @@ corresponding .blp file and regenerate this file with blueprint-compiler.