From 6d3a34a4fa3fcc16e614901412392ea7590028b0 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk Date: Fri, 8 Dec 2017 09:21:58 -0500 Subject: [PATCH] smartlist: check if conversation exists When user search for a new contact and than starts a conversation the conversation model created two times and all subscriptions to the services doubled. This patch uses existing conversation model instead of creating a new one Change-Id: I1d5f3ef1894377fc060e3a03da15a7046940f4d2 --- .../SmartList/SmartlistViewModel.swift | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/Ring/Ring/Features/Conversations/SmartList/SmartlistViewModel.swift b/Ring/Ring/Features/Conversations/SmartList/SmartlistViewModel.swift index 3377a67..e306fd1 100644 --- a/Ring/Ring/Features/Conversations/SmartList/SmartlistViewModel.swift +++ b/Ring/Ring/Features/Conversations/SmartList/SmartlistViewModel.swift @@ -72,7 +72,7 @@ class SmartlistViewModel: Stateable, ViewModel { .disposed(by: self.disposeBag) //Create observable from sorted conversations and flatMap them to view models - let conversationsObservable: Observable<[ConversationViewModel]> = self.conversationsService.conversationsForCurrentAccount.map({ conversations in + let conversationsObservable: Observable<[ConversationViewModel]> = self.conversationsService.conversationsForCurrentAccount.map({ [weak self] conversations in return conversations .sorted(by: { conversation1, conversations2 in @@ -83,22 +83,25 @@ class SmartlistViewModel: Stateable, ViewModel { return lastMessage1.receivedDate > lastMessage2.receivedDate }) - .filter({ self.contactsService.contact(withRingId: $0.recipientRingId) != nil - || (!$0.messages.isEmpty && (self.contactsService.contactRequest(withRingId: $0.recipientRingId) == nil)) + .filter({ self?.contactsService.contact(withRingId: $0.recipientRingId) != nil + || (!$0.messages.isEmpty && (self?.contactsService.contactRequest(withRingId: $0.recipientRingId) == nil)) }) .flatMap({ conversationModel in var conversationViewModel: ConversationViewModel? //Get the current ConversationViewModel if exists or create it - if let foundConversationViewModel = self.conversationViewModels.filter({ conversationViewModel in + if let foundConversationViewModel = self?.conversationViewModels.filter({ conversationViewModel in return conversationViewModel.conversation.value == conversationModel }).first { conversationViewModel = foundConversationViewModel + } else if let contactFound = self?.contactFoundConversation.value, contactFound.conversation.value == conversationModel { + conversationViewModel = contactFound + self?.conversationViewModels.append(contactFound) } else { conversationViewModel = ConversationViewModel(with: injectionBag) conversationViewModel?.conversation = Variable(conversationModel) - self.conversationViewModels.append(conversationViewModel!) + self?.conversationViewModels.append(conversationViewModel!) } return conversationViewModel -- GitLab