mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2025-09-29 09:52:34 +02:00
Logs the relays used for deletion events and checks if it hasn't sent the deleted event to each relay already
This commit is contained in:
@@ -24,6 +24,7 @@ import android.util.Log
|
|||||||
import android.util.LruCache
|
import android.util.LruCache
|
||||||
import androidx.compose.runtime.Stable
|
import androidx.compose.runtime.Stable
|
||||||
import com.vitorpamplona.amethyst.Amethyst
|
import com.vitorpamplona.amethyst.Amethyst
|
||||||
|
import com.vitorpamplona.amethyst.isDebug
|
||||||
import com.vitorpamplona.amethyst.model.nip51Lists.HiddenUsersState
|
import com.vitorpamplona.amethyst.model.nip51Lists.HiddenUsersState
|
||||||
import com.vitorpamplona.amethyst.model.observables.LatestByKindAndAuthor
|
import com.vitorpamplona.amethyst.model.observables.LatestByKindAndAuthor
|
||||||
import com.vitorpamplona.amethyst.model.observables.LatestByKindWithETag
|
import com.vitorpamplona.amethyst.model.observables.LatestByKindWithETag
|
||||||
@@ -1255,72 +1256,74 @@ object LocalCache : ILocalCache {
|
|||||||
relay: NormalizedRelayUrl?,
|
relay: NormalizedRelayUrl?,
|
||||||
wasVerified: Boolean,
|
wasVerified: Boolean,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
if (deletionIndex.add(event, wasVerified)) {
|
val note = getOrCreateNote(event.id)
|
||||||
var deletedAtLeastOne = false
|
val author = getOrCreateUser(event.pubKey)
|
||||||
|
|
||||||
event
|
if (relay != null) {
|
||||||
.deleteEvents()
|
author.addRelayBeingUsed(relay, event.createdAt)
|
||||||
.mapNotNull { getNoteIfExists(it) }
|
note.addRelay(relay)
|
||||||
.forEach { deleteNote ->
|
}
|
||||||
val deleteNoteEvent = deleteNote.event
|
|
||||||
if (deleteNoteEvent is AddressableEvent) {
|
|
||||||
val addressableNote = getAddressableNoteIfExists(deleteNoteEvent.addressTag())
|
|
||||||
if (addressableNote?.author?.pubkeyHex == event.pubKey && (addressableNote.createdAt() ?: 0) <= event.createdAt) {
|
|
||||||
// Counts the replies
|
|
||||||
deleteNote(addressableNote)
|
|
||||||
|
|
||||||
addressables.remove(addressableNote.address)
|
// Already processed this event.
|
||||||
|
if (note.event != null) return false
|
||||||
|
|
||||||
deletedAtLeastOne = true
|
if (wasVerified || justVerify(event)) {
|
||||||
|
note.loadEvent(event, author, emptyList())
|
||||||
|
|
||||||
|
if (deletionIndex.add(event, wasVerified)) {
|
||||||
|
event
|
||||||
|
.deleteEvents()
|
||||||
|
.mapNotNull { getNoteIfExists(it) }
|
||||||
|
.forEach { deleteNote ->
|
||||||
|
val deleteNoteEvent = deleteNote.event
|
||||||
|
if (deleteNoteEvent is AddressableEvent) {
|
||||||
|
val addressableNote = getAddressableNoteIfExists(deleteNoteEvent.addressTag())
|
||||||
|
if (addressableNote?.author?.pubkeyHex == event.pubKey && (addressableNote.createdAt() ?: 0) <= event.createdAt) {
|
||||||
|
// Counts the replies
|
||||||
|
deleteNote(addressableNote)
|
||||||
|
|
||||||
|
addressables.remove(addressableNote.address)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// must be the same author
|
||||||
|
if (deleteNote.author?.pubkeyHex == event.pubKey) {
|
||||||
|
// reverts the add
|
||||||
|
deleteNote(deleteNote)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// must be the same author
|
val addressList = event.deleteAddressIds()
|
||||||
if (deleteNote.author?.pubkeyHex == event.pubKey) {
|
val addressSet = addressList.toSet()
|
||||||
// reverts the add
|
|
||||||
deleteNote(deleteNote)
|
|
||||||
|
|
||||||
deletedAtLeastOne = true
|
addressList
|
||||||
|
.mapNotNull { getAddressableNoteIfExists(it) }
|
||||||
|
.forEach { deleteNote ->
|
||||||
|
// must be the same author
|
||||||
|
if (deleteNote.author?.pubkeyHex == event.pubKey && (deleteNote.createdAt() ?: 0) <= event.createdAt) {
|
||||||
|
// Counts the replies
|
||||||
|
deleteNote(deleteNote)
|
||||||
|
|
||||||
|
addressables.remove(deleteNote.address)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
val addressList = event.deleteAddressIds()
|
notes.forEach { key, note ->
|
||||||
val addressSet = addressList.toSet()
|
val noteEvent = note.event
|
||||||
|
if (noteEvent is AddressableEvent && noteEvent.addressTag() in addressSet) {
|
||||||
addressList
|
if (noteEvent.pubKey == event.pubKey && noteEvent.createdAt <= event.createdAt) {
|
||||||
.mapNotNull { getAddressableNoteIfExists(it) }
|
deleteNote(note)
|
||||||
.forEach { deleteNote ->
|
}
|
||||||
// must be the same author
|
|
||||||
if (deleteNote.author?.pubkeyHex == event.pubKey && (deleteNote.createdAt() ?: 0) <= event.createdAt) {
|
|
||||||
// Counts the replies
|
|
||||||
deleteNote(deleteNote)
|
|
||||||
|
|
||||||
addressables.remove(deleteNote.address)
|
|
||||||
|
|
||||||
deletedAtLeastOne = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
notes.forEach { key, note ->
|
|
||||||
val noteEvent = note.event
|
|
||||||
if (noteEvent is AddressableEvent && noteEvent.addressTag() in addressSet) {
|
|
||||||
if (noteEvent.pubKey == event.pubKey && noteEvent.createdAt <= event.createdAt) {
|
|
||||||
deleteNote(note)
|
|
||||||
deletedAtLeastOne = true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deletedAtLeastOne) {
|
refreshObservers(note)
|
||||||
val note = Note(event.id)
|
|
||||||
note.loadEvent(event, getOrCreateUser(event.pubKey), emptyList())
|
|
||||||
refreshObservers(note)
|
|
||||||
}
|
|
||||||
|
|
||||||
return true
|
return true
|
||||||
|
} else {
|
||||||
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
@@ -2978,9 +2981,16 @@ object LocalCache : ILocalCache {
|
|||||||
if (deletionIndex.hasBeenDeleted(event)) {
|
if (deletionIndex.hasBeenDeleted(event)) {
|
||||||
// update relay with deletion event from another.
|
// update relay with deletion event from another.
|
||||||
if (relay != null) {
|
if (relay != null) {
|
||||||
deletionIndex.hasBeenDeletedBy(event)?.let {
|
deletionIndex.hasBeenDeletedBy(event)?.let { deletionEvent ->
|
||||||
Log.d("LocalCache", "Updating ${relay.url.url} with a Deletion Event ${it.toJson()} because of ${event.toJson()}")
|
getNoteIfExists(deletionEvent.id)?.let { note ->
|
||||||
relay.send(it)
|
if (!note.hasRelay(relay.url)) {
|
||||||
|
if (isDebug) {
|
||||||
|
Log.d("LocalCache", "Updating ${relay.url.url} with a Deletion Event ${event.id} ${deletionEvent.id} because of ${event.toJson()} with ${deletionEvent.toJson()}")
|
||||||
|
}
|
||||||
|
relay.send(deletionEvent)
|
||||||
|
note.addRelay(relay.url)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@@ -2990,13 +3000,14 @@ object LocalCache : ILocalCache {
|
|||||||
// updates relay with a new event.
|
// updates relay with a new event.
|
||||||
getAddressableNoteIfExists(event.address())?.let { note ->
|
getAddressableNoteIfExists(event.address())?.let { note ->
|
||||||
note.event?.let { existingEvent ->
|
note.event?.let { existingEvent ->
|
||||||
if (existingEvent.createdAt > event.createdAt && !note.hasRelay(relay.url)) {
|
if (existingEvent.createdAt > event.createdAt && !note.hasRelay(relay.url) && !deletionIndex.hasBeenDeleted(event)) {
|
||||||
Log.d("LocalCache", "Updating ${relay.url.url} with a new version of ${event.kind} ${event.id} to ${existingEvent.id}")
|
if (isDebug) {
|
||||||
|
Log.d("LocalCache", "Updating ${relay.url.url} with a new version of ${event.kind} ${event.id} to ${existingEvent.id}")
|
||||||
// only send once.
|
}
|
||||||
note.addRelay(relay.url)
|
|
||||||
|
|
||||||
relay.send(existingEvent)
|
relay.send(existingEvent)
|
||||||
|
// only send once.
|
||||||
|
note.addRelay(relay.url)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user