diff --git a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift index 49de08869..41e30f53e 100644 --- a/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift +++ b/Linphone/UI/Main/Conversations/ViewModel/ConversationsListViewModel.swift @@ -183,69 +183,76 @@ class ConversationsListViewModel: ObservableObject { func addConversationDelegate() { coreContext.doOnCoreQueue { core in - self.coreConversationDelegate = CoreDelegateStub(onMessagesReceived: { (core: Core, chatRoom: ChatRoom, _: [ChatMessage]) in - if let defaultAddress = core.defaultAccount?.contactAddress, - let localAddress = chatRoom.localAddress, - defaultAddress.weakEqual(address2: localAddress) { - 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 { - self.conversationsList.remove(at: index!) - } - self.conversationsList.insert(model, at: 0) - } - SharedMainViewModel.shared.updateUnreadMessagesCount() - } - }, onMessageSent: { (_: Core, chatRoom: ChatRoom, _: ChatMessage) in - if let defaultAddress = core.defaultAccount?.contactAddress, - let localAddress = chatRoom.localAddress, - defaultAddress.weakEqual(address2: localAddress) { - 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() - } - DispatchQueue.main.async { - if index != nil { - self.conversationsList.remove(at: index!) - } - self.conversationsList.insert(model, at: 0) - } - SharedMainViewModel.shared.updateUnreadMessagesCount() - } - }, onChatRoomRead: { (_: Core, chatRoom: ChatRoom) in - let idTmp = LinphoneUtils.getChatRoomId(room: chatRoom) - let model = self.conversationsList.first(where: { $0.id == idTmp }) ?? ConversationModel(chatRoom: chatRoom) - model.getContentTextMessage(chatRoom: chatRoom) - if let index = self.conversationsList.firstIndex(where: { $0.id == idTmp }) { - DispatchQueue.main.async { - self.conversationsList.remove(at: index) - self.conversationsList.insert(model, at: index) + self.coreConversationDelegate = CoreDelegateStub( + onMessagesReceived: { (core: Core, chatRoom: ChatRoom, _: [ChatMessage]) in + if let defaultAddress = core.defaultAccount?.contactAddress, + let localAddress = chatRoom.localAddress, + defaultAddress.weakEqual(address2: localAddress) { + 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 { + self.conversationsList.remove(at: index!) + } + self.conversationsList.insert(model, at: 0) + } + SharedMainViewModel.shared.updateUnreadMessagesCount() } + }, onMessageSent: { (_: Core, chatRoom: ChatRoom, _: ChatMessage) in + if let defaultAddress = core.defaultAccount?.contactAddress, + let localAddress = chatRoom.localAddress, + defaultAddress.weakEqual(address2: localAddress) { + 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() + } + DispatchQueue.main.async { + if index != nil { + self.conversationsList.remove(at: index!) + } + self.conversationsList.insert(model, at: 0) + } + SharedMainViewModel.shared.updateUnreadMessagesCount() + } + }, onChatRoomRead: { (_: Core, chatRoom: ChatRoom) in + let idTmp = LinphoneUtils.getChatRoomId(room: chatRoom) + let model = self.conversationsList.first(where: { $0.id == idTmp }) ?? ConversationModel(chatRoom: chatRoom) + model.getContentTextMessage(chatRoom: chatRoom) + if let index = self.conversationsList.firstIndex(where: { $0.id == idTmp }) { + DispatchQueue.main.async { + self.conversationsList.remove(at: index) + self.conversationsList.insert(model, at: index) + } + } + SharedMainViewModel.shared.updateUnreadMessagesCount() + }, onChatRoomStateChanged: { (core: Core, chatroom: ChatRoom, state: ChatRoom.State) in + // Log.info("[ConversationsListViewModel] Conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] state changed [$state]") + if let defaultAddress = core.defaultAccount?.contactAddress, + let localAddress = chatroom.localAddress, + defaultAddress.weakEqual(address2: localAddress) { + if core.globalState == .On { + switch state { + case .Created: + self.addChatRoom(chatRoom: chatroom) + case .Deleted: + self.removeChatRoom(chatRoom: chatroom) + default: + break + } + } + } + }, onMessageRetracted: { (core: Core, chatRoom: ChatRoom, message: ChatMessage) in + let idTmp = LinphoneUtils.getChatRoomId(room: chatRoom) + let model = self.conversationsList.first(where: { $0.id == idTmp }) ?? ConversationModel(chatRoom: chatRoom) + model.getContentTextMessage(chatRoom: chatRoom) + SharedMainViewModel.shared.updateUnreadMessagesCount() } - SharedMainViewModel.shared.updateUnreadMessagesCount() - }, onChatRoomStateChanged: { (core: Core, chatroom: ChatRoom, state: ChatRoom.State) in - // Log.info("[ConversationsListViewModel] Conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] state changed [$state]") - if let defaultAddress = core.defaultAccount?.contactAddress, - let localAddress = chatroom.localAddress, - defaultAddress.weakEqual(address2: localAddress) { - if core.globalState == .On { - switch state { - case .Created: - self.addChatRoom(chatRoom: chatroom) - case .Deleted: - self.removeChatRoom(chatRoom: chatroom) - default: - break - } - } - } - }) + ) core.addDelegate(delegate: self.coreConversationDelegate!) } } diff --git a/Linphone/UI/Main/Viewmodel/AccountModel.swift b/Linphone/UI/Main/Viewmodel/AccountModel.swift index 484f5ab3e..ae363b49a 100644 --- a/Linphone/UI/Main/Viewmodel/AccountModel.swift +++ b/Linphone/UI/Main/Viewmodel/AccountModel.swift @@ -65,6 +65,8 @@ class AccountModel: ObservableObject { self.computeNotificationsCount() }, onChatRoomRead: { (_: Core, _: ChatRoom) in self.computeNotificationsCount() + }, onMessageRetracted: { (_: Core, _: ChatRoom, _: ChatMessage) in + self.computeNotificationsCount() }) core.addDelegate(delegate: coreDelegate!)