adds a native map for tags in the Event class to avoid creating sublists before mapping tags
This commit is contained in:
@@ -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>()
|
||||||
|
|||||||
@@ -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] }
|
||||||
|
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user