From 257f3a5c1c2f069ea9b92924f3caaf82618360d8 Mon Sep 17 00:00:00 2001 From: Ivan Kupalov Date: Wed, 31 Aug 2022 18:55:27 +0200 Subject: [PATCH] Fix broken timeline when there are only expired filters (#2689) * Fix broken timeline when there are only expired filters The issue happened when the only applicable filters are expired. There was a check to not produce an empty regex when there are no filters but it was done before removing expired filters so we would produce an empty regex that would match (and remove) everything and the timeline would get stuck. * Make a mini-optimization for FilterModel --- .../com/keylesspalace/tusky/network/FilterModel.kt | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/network/FilterModel.kt b/app/src/main/java/com/keylesspalace/tusky/network/FilterModel.kt index 8adad95f..db47beaf 100644 --- a/app/src/main/java/com/keylesspalace/tusky/network/FilterModel.kt +++ b/app/src/main/java/com/keylesspalace/tusky/network/FilterModel.kt @@ -38,7 +38,8 @@ class FilterModel @Inject constructor() { (spoilerText.isNotEmpty() && matcher.reset(spoilerText).find()) || ( attachmentsDescriptions.isNotEmpty() && - matcher.reset(attachmentsDescriptions.joinToString("\n")).find() + matcher.reset(attachmentsDescriptions.joinToString("\n")) + .find() ) ) } @@ -54,9 +55,10 @@ class FilterModel @Inject constructor() { } private fun makeFilter(filters: List): Pattern? { - if (filters.isEmpty()) return null - val tokens = filters - .filter { it.expiresAt?.before(Date()) != true } + val now = Date() + val nonExpiredFilters = filters.filter { it.expiresAt?.before(now) != true } + if (nonExpiredFilters.isEmpty()) return null + val tokens = nonExpiredFilters .map { filterToRegexToken(it) } return Pattern.compile(TextUtils.join("|", tokens), Pattern.CASE_INSENSITIVE)