Providing a delete fix for empty drafts.

This commit is contained in:
Vitor Pamplona
2025-07-10 17:04:19 -04:00
parent 191f1344db
commit 4eb348654f
4 changed files with 48 additions and 7 deletions

View File

@@ -675,13 +675,28 @@ class Account(
myRelayList.addAll(it.relays)
}
client.send(deletionEvent, outboxRelays.flow.value + myRelayList)
client.send(deletionEvent, myRelayList)
cache.justConsumeMyOwnEvent(deletionEvent)
}
}
}
}
fun delete(
event: Event,
additionalRelays: Set<NormalizedRelayUrl>,
) {
if (!isWriteable()) return
if (event.pubKey != signer.pubKey) return
signer.sign(
DeletionEvent.build(listOf(event)),
) { deletionEvent ->
client.send(deletionEvent, outboxRelays.flow.value + additionalRelays)
cache.justConsumeMyOwnEvent(deletionEvent)
}
}
suspend fun createHTTPAuthorization(
url: String,
method: String,
@@ -1438,9 +1453,10 @@ class Account(
noteEvent.createDeletedEvent(signer) {
client.send(it, outboxRelays.flow.value + note.relays)
cache.justConsumeMyOwnEvent(it)
delete(it, note.relays.toSet())
}
}
delete(note)
}
}

View File

@@ -2784,6 +2784,12 @@ object LocalCache : ILocalCache {
if (consumeBaseReplaceable(event, relay, wasVerified)) {
return true
}
} else {
// passes to the AccountViewModel for further delete.
val note = Note(event.id)
note.loadEvent(event, getOrCreateUser(event.pubKey), emptyList())
relay?.let { note.addRelay(it) }
refreshObservers(note)
}
return false

View File

@@ -28,7 +28,7 @@ import com.vitorpamplona.quartz.nip37Drafts.DraftEvent
import com.vitorpamplona.quartz.nip51Lists.BookmarkListEvent
import com.vitorpamplona.quartz.nip56Reports.ReportEvent
val DraftsAndReportsFromKeyKinds =
val ReportsAndBookmarksFromKeyKinds =
listOf(
DraftEvent.KIND,
ReportEvent.KIND,
@@ -47,7 +47,7 @@ fun filterDraftsAndReportsFromKey(
relay = relay,
filter =
Filter(
kinds = DraftsAndReportsFromKeyKinds,
kinds = ReportsAndBookmarksFromKeyKinds,
authors = listOf(pubkey),
since = since,
),

View File

@@ -68,9 +68,13 @@ class PrecacheNewNotesProcessor(
is DraftEvent -> {
// Avoid decrypting over and over again if the event already exist.
if (!event.isDeleted() && event.preCachedDraft(account.signer) == null && event.pubKey == account.signer.pubKey) {
event.cachedDraft(account.signer) {
cache.indexDraftAsRealEvent(event, it)
if (event.pubKey == account.signer.pubKey) {
if (!event.isDeleted()) {
if (event.preCachedDraft(account.signer) == null) {
event.cachedDraft(account.signer) {
cache.indexDraftAsRealEvent(event, it)
}
}
}
}
}
@@ -135,6 +139,21 @@ class PrecacheNewNotesProcessor(
newNotes.forEach {
consume(it)
}
val toDelete =
newNotes.mapNotNull {
val noteEvent = it.event
if (noteEvent is DraftEvent && noteEvent.isDeleted()) {
it
} else {
null
}
}
if (toDelete.isNotEmpty()) {
Log.w("PrecacheNewNotesProcessor", "Deleting ${toDelete.size} draft notes that should have been deleted already")
account.delete(toDelete)
}
} catch (e: Exception) {
if (e is CancellationException) throw e
Log.e("PrecacheNewNotesProcessor", "This shouldn't happen", e)