From ec094c0fbe893455f80a8d7d5921666bac33f7ce Mon Sep 17 00:00:00 2001 From: Kateryna Kostiuk Date: Wed, 13 Dec 2017 11:38:26 -0500 Subject: [PATCH] contact request: handle requests without vCard Contact requests without vCard were not shown to user. This patch adds them to list of pending requests. Change-Id: Ie146a9eece296ea7160679175fcc2043d5f5df40 Reviewed-by: Andreas Traczyk --- Ring/Ring/Models/ContactRequestModel.swift | 19 +++++----- Ring/Ring/Services/ContactsService.swift | 40 ++++++++++++---------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/Ring/Ring/Models/ContactRequestModel.swift b/Ring/Ring/Models/ContactRequestModel.swift index d5fe432..1d235e0 100644 --- a/Ring/Ring/Models/ContactRequestModel.swift +++ b/Ring/Ring/Models/ContactRequestModel.swift @@ -25,7 +25,7 @@ class ContactRequestModel { let ringId: String let accountId: String - var vCard: CNContact? + var vCard: CNContact? = nil var receivedDate: Date enum ContactRequestKey: String { @@ -52,14 +52,17 @@ class ContactRequestModel { } if let vCardString = dictionary[ContactRequestKey.payload.rawValue] { - do { - self.vCard = try CNContactVCardSerialization.contacts(with: vCardString.data(using: String.Encoding.utf8)!).first! - } catch { - log.error("Unable to serialize the vCard : \(error)") - self.vCard = CNContact() + if let data = vCardString.data(using: String.Encoding.utf8), !data.isEmpty { + do { + let vCards = try CNContactVCardSerialization.contacts(with: data) + if let contactVCard = vCards.first { + self.vCard = contactVCard + } + } catch { + log.error("Unable to serialize the vCard : \(error)") + self.vCard = CNContact() + } } - } else { - self.vCard = nil } if let receivedDateString = dictionary[ContactRequestKey.received.rawValue] { diff --git a/Ring/Ring/Services/ContactsService.swift b/Ring/Ring/Services/ContactsService.swift index 8fae60a..c489acc 100644 --- a/Ring/Ring/Services/ContactsService.swift +++ b/Ring/Ring/Services/ContactsService.swift @@ -187,28 +187,32 @@ class ContactsService { extension ContactsService: ContactsAdapterDelegate { func incomingTrustRequestReceived(from senderAccount: String, to accountId: String, withPayload payload: Data, receivedDate: Date) { - do { - //Update trust request list - if self.contactRequest(withRingId: senderAccount) == nil { - let vCards = try CNContactVCardSerialization.contacts(with: payload) - let contactRequest = ContactRequestModel(withRingId: senderAccount, - vCard: vCards.first, - receivedDate: receivedDate, - accountId: accountId) - self.contactRequests.value.append(contactRequest) - } else { - // If the contact request already exists, update it's relevant data - if let contactRequest = self.contactRequest(withRingId: senderAccount) { - let vCards = try CNContactVCardSerialization.contacts(with: payload) - contactRequest.vCard = vCards.first - contactRequest.receivedDate = receivedDate - } - } - log.debug("Incoming trust request received from :\(senderAccount)") + var vCard: CNContact? + do { + let vCards = try CNContactVCardSerialization.contacts(with: payload) + vCard = vCards.first } catch { + vCard = nil log.error("Unable to parse the vCard :\(error)") } + + //Update trust request list + if self.contactRequest(withRingId: senderAccount) == nil { + let contactRequest = ContactRequestModel(withRingId: senderAccount, + vCard: vCard, + receivedDate: receivedDate, + accountId: accountId) + self.contactRequests.value.append(contactRequest) + } else { + // If the contact request already exists, update it's relevant data + if let contactRequest = self.contactRequest(withRingId: senderAccount) { + contactRequest.vCard = vCard + contactRequest.receivedDate = receivedDate + } + log.debug("Incoming trust request received from :\(senderAccount)") + } + } func contactAdded(contact uri: String, withAccountId accountId: String, confirmed: Bool) { -- GitLab