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) }
is DraftEvent -> {
event.taggedEvents().mapNotNull { checkGetOrCreateNote(it) } + event.taggedAddresses().mapNotNull { checkGetOrCreateAddressableNote(it.toTag()) }
event.mapTaggedEvent { checkGetOrCreateNote(it) } + event.mapTaggedAddress { checkGetOrCreateAddressableNote(it) }
}
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 forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) =
tags.forEach {
if (it.size > 1 && it[0] == "e") {
onEach(it[1])
}
override fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) = forEachTagged("e", onEach)
private fun forEachTagged(
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] }

View File

@ -119,6 +119,10 @@ interface EventInterface {
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 taggedUsers(): List<HexKey>