Adds k-tag to the Deletion events.

This commit is contained in:
Vitor Pamplona
2024-03-28 19:02:23 -04:00
parent 539433014e
commit cd84c07fcc
2 changed files with 47 additions and 9 deletions
@@ -859,10 +859,11 @@ class Account(
suspend fun delete(notes: List<Note>) { suspend fun delete(notes: List<Note>) {
if (!isWriteable()) return 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()) { if (myNoteVersions.isNotEmpty()) {
DeletionEvent.create(myNotes, signer) { DeletionEvent.create(myNoteVersions, signer) {
Client.send(it) Client.send(it)
LocalCache.justConsume(it, null) LocalCache.justConsume(it, null)
} }
@@ -1891,7 +1892,7 @@ class Account(
Client.send(event) Client.send(event)
LocalCache.justConsume(event, null) LocalCache.justConsume(event, null)
DeletionEvent.create(listOf(event.id), signer) { event2 -> DeletionEvent.createForVersionOnly(listOf(event), signer) { event2 ->
Client.send(event2) Client.send(event2)
LocalCache.justConsume(event2, null) LocalCache.justConsume(event2, null)
} }
@@ -34,22 +34,59 @@ class DeletionEvent(
content: String, content: String,
sig: HexKey, sig: HexKey,
) : Event(id, pubKey, createdAt, KIND, tags, content, sig) { ) : Event(id, pubKey, createdAt, KIND, tags, content, sig) {
fun deleteEvents() = tags.map { it[1] } fun deleteEvents() = taggedEvents()
fun deleteAddresses() = taggedAddresses()
companion object { companion object {
const val KIND = 5 const val KIND = 5
const val ALT = "Deletion event" const val ALT = "Deletion event"
fun create( fun create(
deleteEvents: List<String>, deleteEvents: List<Event>,
signer: NostrSigner, signer: NostrSigner,
createdAt: Long = TimeUtils.now(), createdAt: Long = TimeUtils.now(),
onReady: (DeletionEvent) -> Unit, onReady: (DeletionEvent) -> Unit,
) { ) {
val content = "" val content = ""
val tags = val tags = mutableListOf<Array<String>>()
deleteEvents.map { arrayOf("e", it) }.plusElement(arrayOf("alt", ALT)).toTypedArray()
signer.sign(createdAt, KIND, tags, content, onReady) 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<Event>,
signer: NostrSigner,
createdAt: Long = TimeUtils.now(),
onReady: (DeletionEvent) -> Unit,
) {
val content = ""
val tags = mutableListOf<Array<String>>()
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)
} }
} }
} }