From accb115a20b31d96874b1988f577ff4745d31a30 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sat, 26 Aug 2023 10:36:44 -0400 Subject: [PATCH] Making statuses filter just one with the minimum of all observing users. --- .../service/NostrSingleUserDataSource.kt | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt index cb835c6cf..2b99cb20b 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/service/NostrSingleUserDataSource.kt @@ -30,16 +30,28 @@ object NostrSingleUserDataSource : NostrDataSource("SingleUserFeed") { fun createUserStatusFilter(): List? { if (usersToWatch.isEmpty()) return null - return usersToWatch.map { + val minLatestEOSEs = mutableMapOf() + usersToWatch.forEach { + it.latestEOSEs.forEach { + val minEose = minLatestEOSEs[it.key] + if (minEose == null) { + minLatestEOSEs.put(it.key, EOSETime(it.value.time)) + } else if (it.value.time < minEose.time) { + minEose.time = it.value.time + } + } + } + + return listOf( TypedFilter( types = COMMON_FEED_TYPES, filter = JsonFilter( kinds = listOf(StatusEvent.kind), - authors = listOf(it.pubkeyHex), - since = it.latestEOSEs + authors = usersToWatch.map { it.pubkeyHex }, + since = minLatestEOSEs ) ) - } + ) } fun createUserReportFilter(): List? { @@ -75,7 +87,7 @@ object NostrSingleUserDataSource : NostrDataSource("SingleUserFeed") { } override fun updateChannelFilters() { - userChannel.typedFilters = listOfNotNull(createUserReportFilter(), createUserStatusFilter()).flatten().ifEmpty { null } + userChannel.typedFilters = listOfNotNull(createUserStatusFilter(), createUserReportFilter()).flatten().ifEmpty { null } userChannelOnce.typedFilters = listOfNotNull(createUserFilter()).flatten().ifEmpty { null } }