From 54818c51b45208fb5214a053d2623b55d1829220 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 18 Apr 2024 10:11:09 +0200 Subject: [PATCH] Prevents duplicated message when entering a conversation while SDK is still doing aggregation --- .../chat/viewmodel/ConversationViewModel.kt | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt index c57e8a169..9842ad9f7 100644 --- a/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/chat/viewmodel/ConversationViewModel.kt @@ -174,7 +174,28 @@ class ConversationViewModel @UiThread constructor() : AbstractConversationViewMo Log.i("$TAG Received [${eventLogs.size}] new message(s)") computeComposingLabel() - addEvents(eventLogs) + // Prevents duplicates if user entered conversation while SDK was still doing messages aggregation + val eventsToAdd = arrayListOf() + for (event in eventLogs) { + val found = eventsList.find { + it.model is MessageModel && it.model.chatMessage.messageId == event.chatMessage?.messageId + } + if (found == null) { + eventsToAdd.add(event) + } else { + Log.w( + "$TAG Received message with ID [${event.chatMessage?.messageId}] is already displayed, do not add it again" + ) + } + } + + if (eventsToAdd.size == eventLogs.size) { + addEvents(eventLogs) + } else { + val eventsArray = arrayOf() + eventsToAdd.toArray(eventsArray) + addEvents(eventsArray) + } unreadMessagesCount.postValue(chatRoom.unreadMessagesCount) }