Making statuses filter just one with the minimum of all observing users.

This commit is contained in:
Vitor Pamplona
2023-08-26 10:36:44 -04:00
parent 9de1cec160
commit accb115a20
@@ -30,16 +30,28 @@ object NostrSingleUserDataSource : NostrDataSource("SingleUserFeed") {
fun createUserStatusFilter(): List<TypedFilter>? { fun createUserStatusFilter(): List<TypedFilter>? {
if (usersToWatch.isEmpty()) return null if (usersToWatch.isEmpty()) return null
return usersToWatch.map { val minLatestEOSEs = mutableMapOf<String, EOSETime>()
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( TypedFilter(
types = COMMON_FEED_TYPES, types = COMMON_FEED_TYPES,
filter = JsonFilter( filter = JsonFilter(
kinds = listOf(StatusEvent.kind), kinds = listOf(StatusEvent.kind),
authors = listOf(it.pubkeyHex), authors = usersToWatch.map { it.pubkeyHex },
since = it.latestEOSEs since = minLatestEOSEs
) )
) )
} )
} }
fun createUserReportFilter(): List<TypedFilter>? { fun createUserReportFilter(): List<TypedFilter>? {
@@ -75,7 +87,7 @@ object NostrSingleUserDataSource : NostrDataSource("SingleUserFeed") {
} }
override fun updateChannelFilters() { 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 } userChannelOnce.typedFilters = listOfNotNull(createUserFilter()).flatten().ifEmpty { null }
} }