summaryrefslogtreecommitdiff
path: root/app/src/main/java/org/terst/feedreader/ui
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-08-22 00:57:20 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-08-22 00:57:20 +0000
commitfb69196f961eeaa30432c33db3003effcdbced53 (patch)
treef5cba3621eeeab583effd800a34dfcfb97e0baad /app/src/main/java/org/terst/feedreader/ui
parent00d873a3c5709200451c74b46860a67c1c1a52c7 (diff)
Pre-compile filter rules instead of re-lowercasing per article per emission
ArticleListScreen calls evaluate() once per visible article against the same rule set, re-run on essentially any read-state change to any article in the list. With a couple hundred articles and a handful of rules, calling pattern.lowercase() inside the old per-article evaluate() was thousands of redundant String allocations of the same small set of strings.
Diffstat (limited to 'app/src/main/java/org/terst/feedreader/ui')
-rw-r--r--app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt3
1 files changed, 2 insertions, 1 deletions
diff --git a/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt b/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt
index a852288..6f2db12 100644
--- a/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt
+++ b/app/src/main/java/org/terst/feedreader/ui/ArticleListScreen.kt
@@ -72,7 +72,8 @@ fun ArticleListScreen(
}
val visibleArticles by remember(feedId) {
combine(articleFlow, db.filterRuleDao().observeAll()) { articles, rules ->
- articles.map { it to FilterRuleEngine.evaluate(it, rules) }
+ val compiledRules = FilterRuleEngine.compile(rules)
+ articles.map { it to FilterRuleEngine.evaluate(it, compiledRules) }
.filter { (_, result) -> result != FilterResult.MUTED }
}
}.collectAsState(initial = emptyList())