From 43ebb20646f68b57a011d347b6d99f7de4898e80 Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Mon, 28 Jul 2025 20:44:35 +0200 Subject: [PATCH] Reuse conversation model when sending and receiving messages --- .../Model/ConversationModel.swift | 36 ++++++++++--------- .../ConversationsListViewModel.swift | 9 +++-- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift index cb60013b3..060824597 100644 --- a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift +++ b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift @@ -248,15 +248,17 @@ class ConversationModel: ObservableObject, Identifiable { let lastMessageStateTmp = lastMessage?.state.rawValue ?? 0 - // DispatchQueue.main.async { - self.lastMessageText = lastMessageTextTmp - - self.lastMessageIsOutgoing = lastMessageIsOutgoingTmp + DispatchQueue.main.async { + self.lastMessageText = lastMessageTextTmp + + self.lastMessageIsOutgoing = lastMessageIsOutgoingTmp + + self.lastUpdateTime = lastUpdateTimeTmp + + self.lastMessageState = lastMessageStateTmp + } - self.lastUpdateTime = lastUpdateTimeTmp - - self.lastMessageState = lastMessageStateTmp - // } + getUnreadMessagesCount() } } @@ -314,19 +316,19 @@ class ConversationModel: ObservableObject, Identifiable { self.chatRoom.participants.forEach { participant in participantsAddressTmp.append(participant.address?.asStringUriOnly() ?? "") } - - // DispatchQueue.main.async { - self.subject = subjectTmp - self.avatarModel = avatarModelTmp - self.participantsAddress = participantsAddressTmp - // } + + DispatchQueue.main.async { + self.subject = subjectTmp + self.avatarModel = avatarModelTmp + self.participantsAddress = participantsAddressTmp + } } func getUnreadMessagesCount() { let unreadMessagesCountTmp = self.chatRoom.unreadMessagesCount - // DispatchQueue.main.async { - self.unreadMessagesCount = unreadMessagesCountTmp - // } + DispatchQueue.main.async { + self.unreadMessagesCount = unreadMessagesCountTmp + } } func refreshAvatarModel() { diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift index 0393ccd6e..476197e42 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift @@ -189,8 +189,9 @@ class ConversationsListViewModel: ObservableObject { if let defaultAddress = core.defaultAccount?.contactAddress, let localAddress = chatRoom.localAddress, defaultAddress.weakEqual(address2: localAddress) { - let model = ConversationModel(chatRoom: chatRoom) let idTmp = LinphoneUtils.getChatRoomId(room: chatRoom) + let model = self.conversationsList.first(where: { $0.id == idTmp }) ?? ConversationModel(chatRoom: chatRoom) + model.getContentTextMessage(chatRoom: chatRoom) let index = self.conversationsList.firstIndex(where: { $0.id == idTmp }) DispatchQueue.main.async { if index != nil { @@ -204,8 +205,9 @@ class ConversationsListViewModel: ObservableObject { if let defaultAddress = core.defaultAccount?.contactAddress, let localAddress = chatRoom.localAddress, defaultAddress.weakEqual(address2: localAddress) { - let model = ConversationModel(chatRoom: chatRoom) let idTmp = LinphoneUtils.getChatRoomId(room: chatRoom) + let model = self.conversationsList.first(where: { $0.id == idTmp }) ?? ConversationModel(chatRoom: chatRoom) + model.getContentTextMessage(chatRoom: chatRoom) let index = self.conversationsList.firstIndex(where: { $0.id == idTmp }) if index != nil { self.conversationsList[index!].chatMessageRemoveDelegate() @@ -222,8 +224,9 @@ class ConversationsListViewModel: ObservableObject { if let defaultAddress = core.defaultAccount?.contactAddress, let localAddress = chatRoom.localAddress, defaultAddress.weakEqual(address2: localAddress) { - let model = ConversationModel(chatRoom: chatRoom) let idTmp = LinphoneUtils.getChatRoomId(room: chatRoom) + let model = self.conversationsList.first(where: { $0.id == idTmp }) ?? ConversationModel(chatRoom: chatRoom) + model.getContentTextMessage(chatRoom: chatRoom) let index = self.conversationsList.firstIndex(where: { $0.id == idTmp }) DispatchQueue.main.async { if index != nil {