From c610d130f8b8676d3fd0ab4ea3498b71f432cad3 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 19 Feb 2023 15:36:00 -0500 Subject: [PATCH] Pruning Messages from Hidden Users. --- .../vitorpamplona/amethyst/ServiceManager.kt | 2 + .../amethyst/model/LocalCache.kt | 50 +++++++++++++++++++ .../com/vitorpamplona/amethyst/model/User.kt | 4 ++ 3 files changed, 56 insertions(+) diff --git a/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt b/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt index d07c774ec..cc47baaaf 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/ServiceManager.kt @@ -72,6 +72,8 @@ object ServiceManager { account?.let { LocalCache.pruneOldAndHiddenMessages(it) + LocalCache.pruneHiddenMessages(it) + //LocalCache.pruneNonFollows(it) } } 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 bedc87377..67f062d03 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/LocalCache.kt @@ -567,6 +567,56 @@ object LocalCache { } } + fun pruneNonFollows(account: Account) { + val follows = account.userProfile().follows + val knownPMs = account.userProfile().privateChatrooms.filter { + account.userProfile().hasSentMessagesTo(it.key) && account.isAcceptable(it.key) + } + + val followsFollow = follows.map { + it.follows + }.flatten() + + val followSet = follows.plus(knownPMs).plus(account.userProfile()).plus(followsFollow) + + val toBeRemoved = notes + .filter { + (it.value.author == null || it.value.author!! !in followSet) && it.value.event?.kind == TextNoteEvent.kind && it.value.liveSet?.isInUse() != true + } + + toBeRemoved.forEach { + notes.remove(it.key) + } + + val toBeRemovedUsers = users + .filter { + (it.value !in followSet) && it.value.liveSet?.isInUse() != true + } + + toBeRemovedUsers.forEach { + users.remove(it.key) + } + + println("PRUNE: ${toBeRemoved.size} messages removed because they came from NonFollows") + println("PRUNE: ${toBeRemovedUsers.size} users removed because are NonFollows") + } + + fun pruneHiddenMessages(account: Account) { + val toBeRemoved = account.hiddenUsers.map { + users[it]?.notes ?: emptySet() + }.flatten() + + account.hiddenUsers.forEach { + users[it]?.clearNotes() + } + + toBeRemoved.forEach { + notes.remove(it.idHex) + } + + println("PRUNE: ${toBeRemoved.size} messages removed because they were Hidden") + } + // Observers line up here. val live: LocalCacheLiveData = LocalCacheLiveData(this) 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 53f705db0..5cfdf0b66 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -126,6 +126,10 @@ class User(val pubkeyHex: String) { } } + fun clearNotes() { + notes = setOf() + } + fun addReport(note: Note) { val author = note.author ?: return