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

View File

@ -859,10 +859,11 @@ class Account(
suspend fun delete(notes: List<Note>) {
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)
}

View File

@ -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<String>,
deleteEvents: List<Event>,
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<Array<String>>()
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)
}
}
}