diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index dafbfd0f9..a88e97566 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -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() diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt index 4756382e4..9cf27f563 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/Event.kt @@ -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 mapTaggedEvent(map: (eventId: HexKey) -> R) = mapTagged("e", map) + + override fun mapTaggedAddress(map: (address: String) -> R) = mapTagged("a", map) + + private fun 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] } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt index d4f3056b8..957ff7a99 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/EventInterface.kt @@ -119,6 +119,10 @@ interface EventInterface { fun forEachTaggedEvent(onEach: (eventId: HexKey) -> Unit) + fun mapTaggedEvent(map: (eventId: HexKey) -> R): List + + fun mapTaggedAddress(map: (address: String) -> R): List + fun taggedAddresses(): List fun taggedUsers(): List