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 } }