diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt index da8ba2f09..6a7d123f9 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Account.kt @@ -859,10 +859,11 @@ class Account( suspend fun delete(notes: List) { if (!isWriteable()) return - val myNotes = notes.filter { it.author == userProfile() }.mapNotNull { it.event?.id() } + val myEvents = notes.filter { it.author == userProfile() } + val myNoteVersions = myEvents.mapNotNull { it.event as? Event } - if (myNotes.isNotEmpty()) { - DeletionEvent.create(myNotes, signer) { + if (myNoteVersions.isNotEmpty()) { + DeletionEvent.create(myNoteVersions, signer) { Client.send(it) LocalCache.justConsume(it, null) } @@ -1891,7 +1892,7 @@ class Account( Client.send(event) LocalCache.justConsume(event, null) - DeletionEvent.create(listOf(event.id), signer) { event2 -> + DeletionEvent.createForVersionOnly(listOf(event), signer) { event2 -> Client.send(event2) LocalCache.justConsume(event2, null) } diff --git a/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt b/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt index 7892b80a4..f3b1cd7f4 100644 --- a/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt +++ b/quartz/src/main/java/com/vitorpamplona/quartz/events/DeletionEvent.kt @@ -34,22 +34,59 @@ class DeletionEvent( content: String, sig: HexKey, ) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { - fun deleteEvents() = tags.map { it[1] } + fun deleteEvents() = taggedEvents() + + fun deleteAddresses() = taggedAddresses() companion object { const val KIND = 5 const val ALT = "Deletion event" fun create( - deleteEvents: List, + deleteEvents: List, signer: NostrSigner, createdAt: Long = TimeUtils.now(), onReady: (DeletionEvent) -> Unit, ) { val content = "" - val tags = - deleteEvents.map { arrayOf("e", it) }.plusElement(arrayOf("alt", ALT)).toTypedArray() - signer.sign(createdAt, KIND, tags, content, onReady) + val tags = mutableListOf>() + + val kinds = + deleteEvents.mapTo(HashSet()) { + "${it.kind}" + }.map { + arrayOf("k", it) + } + + tags.addAll(deleteEvents.map { arrayOf("e", it.id) }) + tags.addAll(deleteEvents.mapNotNull { if (it is AddressableEvent) arrayOf("a", it.address().toTag()) else null }) + tags.addAll(kinds) + tags.add(arrayOf("alt", ALT)) + + signer.sign(createdAt, KIND, tags.toTypedArray(), content, onReady) + } + + fun createForVersionOnly( + deleteEvents: List, + signer: NostrSigner, + createdAt: Long = TimeUtils.now(), + onReady: (DeletionEvent) -> Unit, + ) { + val content = "" + val tags = mutableListOf>() + + val kinds = + deleteEvents.mapTo(HashSet()) { + "${it.kind}" + }.map { + arrayOf("k", it) + } + + tags.addAll(deleteEvents.map { arrayOf("e", it.id) }) + tags.addAll(kinds) + tags.add(arrayOf("alt", ALT)) + + signer.sign(createdAt, KIND, tags.toTypedArray(), content, onReady) } } }