From f455898ac40012dbf49919f45e9daf22dbc13193 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Thu, 23 Feb 2023 14:45:06 -0500 Subject: [PATCH] Properly removes a note from the database --- .../amethyst/model/LocalCache.kt | 29 +++++++++++++++++++ .../com/vitorpamplona/amethyst/model/Note.kt | 22 +++++++++++++- .../com/vitorpamplona/amethyst/model/User.kt | 4 +++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt index 772461a98..9cb76802a 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -585,6 +585,19 @@ object LocalCache { toBeRemoved.forEach { notes.remove(it.idHex) // Doesn't need to clean up the replies and mentions.. Too small to matter. + + // reverts the add + it.mentions?.forEach { user -> + user.removeTaggedPost(it) + } + it.replyTo?.forEach { replyingNote -> + replyingNote.author?.removeTaggedPost(it) + } + + // Counts the replies + it.replyTo?.forEach { replyingNote -> + it.removeReply(it) + } } println("PRUNE: ${toBeRemoved.size} messages removed from ${it.value.info.name}") @@ -635,6 +648,22 @@ object LocalCache { } toBeRemoved.forEach { + // reverts the add + it.mentions?.forEach { user -> + user.removeTaggedPost(it) + } + it.replyTo?.forEach { replyingNote -> + replyingNote.author?.removeTaggedPost(it) + } + + // Counts the replies + it.replyTo?.forEach { replyingNote -> + it.removeReply(it) + it.removeBoost(it) + it.removeReaction(it) + it.removeZap(it) + } + notes.remove(it.idHex) } diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt index d46573d0f..966b6377e 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/Note.kt @@ -104,6 +104,25 @@ class Note(val idHex: String) { } } + fun removeReply(note: Note) { + replies = replies - note + } + fun removeBoost(note: Note) { + boosts = boosts - note + } + fun removeReaction(note: Note) { + reactions = reactions - note + } + fun removeZap(note: Note) { + if (zaps[note] != null) { + zaps = zaps.minus(note) + } else if (zaps.containsValue(note)) { + val toRemove = zaps.filterValues { it == note } + zaps = zaps.minus(toRemove.keys) + } + } + + fun addBoost(note: Note) { if (note !in boosts) { boosts = boosts + note @@ -261,7 +280,8 @@ class NoteLiveSet(u: Note) { val zaps: NoteLiveData = NoteLiveData(u) fun isInUse(): Boolean { - return reactions.hasObservers() + return metadata.hasObservers() + || reactions.hasObservers() || boosts.hasObservers() || replies.hasObservers() || reports.hasObservers() diff --git a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt index d1856c965..18ee39518 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -123,6 +123,10 @@ class User(val pubkeyHex: String) { } } + fun removeTaggedPost(note: Note) { + taggedPosts = taggedPosts - note + } + fun addNote(note: Note) { if (note !in notes) { notes = notes + note