adds a native map for tags in the Event class to avoid creating sublists before mapping tags

This commit is contained in:
Vitor Pamplona 2024-06-11 18:19:52 -04:00
parent cafad6a003
commit 31e8782b1a
3 changed files with 29 additions and 6 deletions

View File

@ -800,7 +800,7 @@ object LocalCache {
.mapNotNull { checkGetOrCreateNote(it) } .mapNotNull { checkGetOrCreateNote(it) }
is DraftEvent -> { is DraftEvent -> {
event.taggedEvents().mapNotNull { checkGetOrCreateNote(it) } + event.taggedAddresses().mapNotNull { checkGetOrCreateAddressableNote(it.toTag()) } event.mapTaggedEvent { checkGetOrCreateNote(it) } + event.mapTaggedAddress { checkGetOrCreateAddressableNote(it) }
} }
else -> emptyList<Note>() else -> emptyList<Note>()

View File

@ -88,12 +88,31 @@ open class Event(
override fun hasTagWithContent(tagName: String) = tags.any { it.size > 1 && it[0] == tagName } override fun hasTagWithContent(tagName: String) = tags.any { it.size > 1 && it[0] == tagName }
override fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) = override fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) = forEachTagged("e", onEach)
tags.forEach {
if (it.size > 1 && it[0] == "e") { private fun forEachTagged(
onEach(it[1]) tagName: String,
} onEach: (eventId: HexKey) -> Unit,
) = tags.forEach {
if (it.size > 1 && it[0] == tagName) {
onEach(it[1])
} }
}
override fun <R> mapTaggedEvent(map: (eventId: HexKey) -> R) = mapTagged("e", map)
override fun <R> mapTaggedAddress(map: (address: String) -> R) = mapTagged("a", map)
private fun <R> mapTagged(
tagName: String,
map: (eventId: HexKey) -> R,
) = tags.mapNotNull {
if (it.size > 1 && it[0] == tagName) {
map(it[1])
} else {
null
}
}
override fun taggedUsers() = tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] } override fun taggedUsers() = tags.filter { it.size > 1 && it[0] == "p" }.map { it[1] }

View File

@ -119,6 +119,10 @@ interface EventInterface {
fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit)
fun <R> mapTaggedEvent(map: (eventId: HexKey) -> R): List<R>
fun <R> mapTaggedAddress(map: (address: String) -> R): List<R>
fun taggedAddresses(): List<ATag> fun taggedAddresses(): List<ATag>
fun taggedUsers(): List<HexKey> fun taggedUsers(): List<HexKey>