Fixes deletion computation in the update of feeds (it was not considering the a-tag's date and deleting newer events than the deletion request)

This commit is contained in:
Vitor Pamplona
2025-09-08 16:48:58 -04:00
parent 26599fe24f
commit 81dbebc5a4
2 changed files with 10 additions and 21 deletions

View File

@@ -31,7 +31,6 @@ import com.vitorpamplona.amethyst.ui.note.toShortDisplay
import com.vitorpamplona.quartz.experimental.bounties.addedRewardValue
import com.vitorpamplona.quartz.experimental.bounties.hasAdditionalReward
import com.vitorpamplona.quartz.lightning.LnInvoiceUtil
import com.vitorpamplona.quartz.nip01Core.core.AddressableEvent
import com.vitorpamplona.quartz.nip01Core.core.Event
import com.vitorpamplona.quartz.nip01Core.core.HexKey
import com.vitorpamplona.quartz.nip01Core.hints.EventHintBundle
@@ -101,14 +100,6 @@ class AddressableNote(
fun dTag(): String = address.dTag
override fun wasOrShouldBeDeletedBy(
deletionEvents: Set<HexKey>,
deletionAddressables: Set<Address>,
): Boolean {
val thisEvent = event
return deletionAddressables.contains(address) || (thisEvent != null && deletionEvents.contains(thisEvent.id))
}
fun toNAddr() = NAddress.create(address.kind, address.pubKeyHex, address.dTag, relayHintUrl())
fun toATag() = ATag(address, relayHintUrl())
@@ -911,14 +902,6 @@ open class Note(
}
}
open fun wasOrShouldBeDeletedBy(
deletionEvents: Set<HexKey>,
deletionAddressables: Set<Address>,
): Boolean {
val thisEvent = event
return deletionEvents.contains(idHex) || (thisEvent is AddressableEvent && deletionAddressables.contains(thisEvent.address()))
}
fun toETag(): ETag {
val noteEvent = event
return if (noteEvent != null) {

View File

@@ -23,6 +23,7 @@ package com.vitorpamplona.amethyst.ui.feeds
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.Stable
import androidx.compose.runtime.mutableStateOf
import com.vitorpamplona.amethyst.model.LocalCache
import com.vitorpamplona.amethyst.model.Note
import com.vitorpamplona.amethyst.service.checkNotInMainThread
import com.vitorpamplona.amethyst.ui.dal.AdditiveFeedFilter
@@ -144,11 +145,15 @@ class FeedContentState(
if (deletionEvents.isEmpty()) {
oldNotesState.feed.value.list
} else {
val deletedEventIds = deletionEvents.flatMapTo(HashSet()) { it.deleteEventIds() }
val deletedEventAddresses = deletionEvents.flatMapTo(HashSet()) { it.deleteAddresses() }
oldNotesState.feed.value.list
.filter { !it.wasOrShouldBeDeletedBy(deletedEventIds, deletedEventAddresses) }
.toImmutableList()
.filter {
val noteEvent = it.event
if (noteEvent != null) {
!LocalCache.deletionIndex.hasBeenDeleted(noteEvent)
} else {
false
}
}.toImmutableList()
}
val newList =
@@ -156,6 +161,7 @@ class FeedContentState(
.updateListWith(oldList, newItems)
.distinctBy { it.idHex }
.toImmutableList()
if (!equalImmutableLists(newList, oldNotesState.feed.value.list)) {
updateFeed(newList)
}