From 70405b0f1be8daf87c2eb3c0d7af8648356a4763 Mon Sep 17 00:00:00 2001 From: Benoit Martins Date: Wed, 6 Nov 2024 13:34:47 +0100 Subject: [PATCH] Fix updating of chat room list --- .../Model/ConversationModel.swift | 5 ++++- .../ViewModel/ConversationViewModel.swift | 14 ++++++++++++ .../ConversationsListViewModel.swift | 22 +++++-------------- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift index 1f3c2ffd3..6e681a91f 100644 --- a/Linphone/UI/Main/Conversations/Model/ConversationModel.swift +++ b/Linphone/UI/Main/Conversations/Model/ConversationModel.swift @@ -306,7 +306,10 @@ class ConversationModel: ObservableObject, Identifiable { func getUnreadMessagesCount() { coreContext.doOnCoreQueue { _ in - self.unreadMessagesCount = self.chatRoom.unreadMessagesCount + let unreadMessagesCountTmp = self.chatRoom.unreadMessagesCount + DispatchQueue.main.async { + self.unreadMessagesCount = unreadMessagesCountTmp + } } } diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift index 6723d3b4f..055e358d6 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationViewModel.swift @@ -126,6 +126,20 @@ class ConversationViewModel: ObservableObject { self.getNewMessages(eventLogs: [eventLogs]) }, onSubjectChanged: { (_: ChatRoom, eventLogs: EventLog) in self.getNewMessages(eventLogs: [eventLogs]) + }, onConferenceJoined: {(_: ChatRoom, eventLog: EventLog) in + self.getNewMessages(eventLogs: [eventLog]) + if self.displayedConversation != nil { + DispatchQueue.main.async { + self.displayedConversation!.isReadOnly = false + } + } + }, onConferenceLeft: {(_: ChatRoom, eventLog: EventLog) in + self.getNewMessages(eventLogs: [eventLog]) + if self.displayedConversation != nil { + DispatchQueue.main.async { + self.displayedConversation!.isReadOnly = true + } + } }, onEphemeralEvent: {(_: ChatRoom, eventLogs: EventLog) in self.getNewMessages(eventLogs: [eventLogs]) }, onEphemeralMessageDeleted: {(_: ChatRoom, eventLog: EventLog) in diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift index bab467a99..21fc88826 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift @@ -68,7 +68,6 @@ class ConversationsListViewModel: ObservableObject { coreContext.doOnCoreQueue { core in let account = core.defaultAccount let chatRoomsCounter = account?.chatRooms != nil ? account!.chatRooms.count : core.chatRooms.count - var counter = 0 self.coreConversationDelegate = CoreDelegateStub(onMessagesReceived: { (_: Core, _: ChatRoom, _: [ChatMessage]) in self.computeChatRoomsList(filter: "") @@ -76,24 +75,15 @@ class ConversationsListViewModel: ObservableObject { self.computeChatRoomsList(filter: "") }, onChatRoomRead: { (_: Core, _: ChatRoom) in self.computeChatRoomsList(filter: "") - }, onChatRoomStateChanged: { (_: Core, chatRoom: ChatRoom, state: ChatRoom.State) in + }, onChatRoomStateChanged: { (core: Core, chatRoom: ChatRoom, state: ChatRoom.State) in // Log.info("[ConversationsListViewModel] Conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] state changed [$state]") - switch state { - case ChatRoom.State.Created: - if !(chatRoom.isEmpty && chatRoom.hasCapability(mask: ChatRoom.Capabilities.OneToOne.rawValue)) { - counter += 1 - } - - if counter >= chatRoomsCounter { + if core.globalState == .On { + switch state { + case .Created, .Deleted, .Terminated: self.computeChatRoomsList(filter: "") - counter = 0 + default: + break } - case ChatRoom.State.Deleted: - self.computeChatRoomsList(filter: "") - // ToastViewModel.shared.toastMessage = "toast_conversation_deleted" - // ToastViewModel.shared.displayToast = true - default: - break } }) core.addDelegate(delegate: self.coreConversationDelegate!)