From ebe1bcedd02dc90360316a90b7e4404f4643a794 Mon Sep 17 00:00:00 2001 From: Vitor Pamplona Date: Sun, 25 Jun 2023 16:11:21 -0400 Subject: [PATCH] Moves user msg Synchronization to it's own object. --- .../com/vitorpamplona/amethyst/model/User.kt | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) 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 61ef9c6a1..11825e078 100644 --- a/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt +++ b/app/src/main/java/com/vitorpamplona/amethyst/model/User.kt @@ -187,34 +187,34 @@ class User(val pubkeyHex: String) { } @Synchronized - private fun getOrCreatePrivateChatroom(user: User): Chatroom { + private fun getOrCreatePrivateChatroomSync(user: User): Chatroom { checkNotInMainThread() return privateChatrooms[user] ?: run { - val privateChatroom = Chatroom(setOf()) + val privateChatroom = Chatroom() privateChatrooms = privateChatrooms + Pair(user, privateChatroom) privateChatroom } } - @Synchronized - fun addMessage(user: User, msg: Note) { - checkNotInMainThread() + private fun getOrCreatePrivateChatroom(user: User): Chatroom { + return privateChatrooms[user] ?: getOrCreatePrivateChatroomSync(user) + } + fun addMessage(user: User, msg: Note) { val privateChatroom = getOrCreatePrivateChatroom(user) if (msg !in privateChatroom.roomMessages) { - privateChatroom.roomMessages = privateChatroom.roomMessages + msg + privateChatroom.addMessageSync(msg) liveSet?.messages?.invalidateData() } } - @Synchronized fun removeMessage(user: User, msg: Note) { checkNotInMainThread() val privateChatroom = getOrCreatePrivateChatroom(user) if (msg in privateChatroom.roomMessages) { - privateChatroom.roomMessages = privateChatroom.roomMessages - msg + privateChatroom.removeMessageSync(msg) liveSet?.messages?.invalidateData() } } @@ -373,7 +373,27 @@ data class RelayInfo( var counter: Long ) -data class Chatroom(var roomMessages: Set) +class Chatroom() { + var roomMessages: Set = setOf() + + @Synchronized + fun addMessageSync(msg: Note) { + checkNotInMainThread() + + if (msg !in roomMessages) { + roomMessages = roomMessages + msg + } + } + + @Synchronized + fun removeMessageSync(msg: Note) { + checkNotInMainThread() + + if (msg !in roomMessages) { + roomMessages = roomMessages + msg + } + } +} @Stable class UserMetadata {