From 02dacd7b7d50603ea96d78cfae3c937715154f71 Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk Date: Wed, 13 Dec 2017 12:30:38 -0500 Subject: [PATCH] conversation: remove when contact is discarded Remove conversation that contain only generated messages when contact request is discarded Change-Id: Ib7c393c658013780f1a8bf8a20c40f87a40b563c Reviewed-by: Andreas Traczyk --- .../Ring/Services/ContactRequestManager.swift | 22 +++++++++++++++++++ Ring/Ring/Services/ContactsService.swift | 4 ++++ Ring/Ring/Services/ServiceEvent.swift | 1 + 3 files changed, 27 insertions(+) diff --git a/Ring/Ring/Services/ContactRequestManager.swift b/Ring/Ring/Services/ContactRequestManager.swift index d96a6d3..795054a 100644 --- a/Ring/Ring/Services/ContactRequestManager.swift +++ b/Ring/Ring/Services/ContactRequestManager.swift @@ -85,6 +85,12 @@ class ContactRequestManager { type = GeneratedMessageType.sendContactRequest case ServiceEventType.contactRequestReceived: type = GeneratedMessageType.receivedContactRequest + case ServiceEventType.contactRequestDiscarded: + self.removeConversation(accountId: account.id, + accountRingId: ringId, + contactRingId: contactRingId, + shouldUpdateConversation: shouldUpdateConversations) + return default: return } @@ -99,4 +105,20 @@ class ContactRequestManager { }) .disposed(by: disposeBag) } + + private func removeConversation(accountId: String, accountRingId: String, + contactRingId: String, + shouldUpdateConversation: Bool) { + + guard let conversation = self.conversationService.findConversation(withRingId: contactRingId, withAccountId: accountId) else { + return + } + // remove conversation if it contain only generated messages + let messagesNotGenerated = conversation.messages.filter({!$0.isGenerated}) + + if !messagesNotGenerated.isEmpty { + return + } + self.conversationService.deleteConversation(conversation: conversation) + } } diff --git a/Ring/Ring/Services/ContactsService.swift b/Ring/Ring/Services/ContactsService.swift index 424bd2d..3a05261 100644 --- a/Ring/Ring/Services/ContactsService.swift +++ b/Ring/Ring/Services/ContactsService.swift @@ -127,6 +127,10 @@ class ContactsService { self.removeContactRequest(withRingId: contactRequest.ringId) if success { + var event = ServiceEvent(withEventType: .contactRequestDiscarded) + event.addEventInput(.accountId, value: account.id) + event.addEventInput(.uri, value: contactRequest.ringId) + self.responseStream.onNext(event) observable.on(.completed) } else { observable.on(.error(ContactServiceError.diacardTrusRequestFailed)) diff --git a/Ring/Ring/Services/ServiceEvent.swift b/Ring/Ring/Services/ServiceEvent.swift index 047a2e2..76decfa 100644 --- a/Ring/Ring/Services/ServiceEvent.swift +++ b/Ring/Ring/Services/ServiceEvent.swift @@ -35,6 +35,7 @@ enum ServiceEventType { case contactAdded case contactRequestSended case contactRequestReceived + case contactRequestDiscarded } /** -- GitLab