Adds a flatten to set utility

This commit is contained in:
Vitor Pamplona
2025-10-31 18:36:05 -04:00
parent 95cc0783fd
commit 3eb662851b
7 changed files with 23 additions and 8 deletions

View File

@@ -31,6 +31,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.notifications.equalImmutabl
import com.vitorpamplona.ammolite.relays.BundledInsert
import com.vitorpamplona.ammolite.relays.BundledUpdate
import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.flattenToSet
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
@@ -160,7 +161,7 @@ class ChannelFeedContentState(
}
fun invalidateInsertData(newItems: Set<Note>) {
bundlerInsert.invalidateList(newItems) { refreshFromOldState(it.flatten().toSet()) }
bundlerInsert.invalidateList(newItems) { refreshFromOldState(it.flattenToSet()) }
}
fun updateFeedWith(newNotes: Set<Note>) {

View File

@@ -32,6 +32,7 @@ import com.vitorpamplona.amethyst.ui.screen.loggedIn.notifications.equalImmutabl
import com.vitorpamplona.ammolite.relays.BasicBundledInsert
import com.vitorpamplona.ammolite.relays.BasicBundledUpdate
import com.vitorpamplona.quartz.nip09Deletions.DeletionEvent
import com.vitorpamplona.quartz.utils.flattenToSet
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
@@ -212,7 +213,7 @@ class FeedContentState(
fun invalidateInsertData(newItems: Set<Note>) {
bundlerInsert.invalidateList(newItems) {
refreshFromOldState(it.flatten().toSet())
refreshFromOldState(it.flattenToSet())
}
}

View File

@@ -48,6 +48,7 @@ import com.vitorpamplona.quartz.nip28PublicChat.admin.ChannelMetadataEvent
import com.vitorpamplona.quartz.nip57Zaps.LnZapEvent
import com.vitorpamplona.quartz.nip58Badges.BadgeAwardEvent
import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.flattenToSet
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
@@ -426,7 +427,7 @@ class CardFeedContentState(
fun invalidateInsertData(newItems: Set<Note>) {
bundlerInsert.invalidateList(newItems) {
val newObjects = it.flatten().toSet()
val newObjects = it.flattenToSet()
logTime("${this.javaClass.simpleName} Card additive receiving ${newObjects.size} items into ${it.size} items") {
if (newObjects.isNotEmpty()) {
refreshFromOldState(newObjects)

View File

@@ -26,6 +26,7 @@ import com.vitorpamplona.amethyst.model.User
import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter
import com.vitorpamplona.amethyst.ui.dal.DefaultFeedOrder
import com.vitorpamplona.quartz.nip89AppHandlers.recommendation.AppRecommendationEvent
import com.vitorpamplona.quartz.utils.flattenToSet
class UserProfileAppRecommendationsFeedFilter(
val user: User,
@@ -43,7 +44,7 @@ class UserProfileAppRecommendationsFeedFilter(
override fun applyFilter(newItems: Set<Note>): Set<Note> = innerApplyFilter(newItems)
private fun innerApplyFilter(collection: Collection<Note>): Set<Note> = collection.mapNotNull { filterMap(it) }.flatten().toSet()
private fun innerApplyFilter(collection: Collection<Note>): Set<Note> = collection.mapNotNull { filterMap(it) }.flattenToSet()
fun filterMap(it: Note): List<Note>? {
val noteEvent = it.event

View File

@@ -31,6 +31,7 @@ import com.vitorpamplona.quartz.nip01Core.store.sqlite.EventStore
import com.vitorpamplona.quartz.nip09Deletions.DeletionEvent
import com.vitorpamplona.quartz.nip40Expiration.isExpired
import com.vitorpamplona.quartz.utils.Log
import com.vitorpamplona.quartz.utils.flattenToSet
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
@@ -72,8 +73,8 @@ class LargeDBInsertBenchmark : BaseLargeCacheBenchmark() {
fun bench40DeletionRequestsEvents() {
val context = ApplicationProvider.getApplicationContext<Context>()
val deletions = allEvents.filterIsInstance<DeletionEvent>()
val deletionIds = deletions.map { it.deleteEventIds() }.flatten().toSet()
val deletionAddresses = deletions.map { it.deleteAddressIds() }.flatten().toSet()
val deletionIds = deletions.map { it.deleteEventIds() }.flattenToSet()
val deletionAddresses = deletions.map { it.deleteAddressIds() }.flattenToSet()
val toBeDeletedEvents =
allEvents.filter {

View File

@@ -20,6 +20,8 @@
*/
package com.vitorpamplona.quartz.nip01Core.tags.hashtags
import com.vitorpamplona.quartz.utils.flattenToSet
fun hashtagAlts(tag: String): Set<String> =
setOf(
tag,
@@ -30,6 +32,6 @@ fun hashtagAlts(tag: String): Set<String> =
},
)
fun hashtagAlts(tags: List<String>): Set<String> = tags.map { hashtagAlts(it) }.flatten().toSet()
fun hashtagAlts(tags: List<String>): Set<String> = tags.map { hashtagAlts(it) }.flattenToSet()
fun hashtagAlts(tags: Set<String>): Set<String> = tags.map { hashtagAlts(it) }.flatten().toSet()
fun hashtagAlts(tags: Set<String>): Set<String> = tags.map { hashtagAlts(it) }.flattenToSet()

View File

@@ -46,3 +46,11 @@ fun <T> Iterable<T>.joinToStringLimited(
buffer.append(postfix)
return buffer.toString()
}
public fun <T> Iterable<Iterable<T>>.flattenToSet(): Set<T> {
val result = mutableSetOf<T>()
for (element in this) {
result.addAll(element)
}
return result
}