From d1588e842077177eee67c6979e62e530976006e6 Mon Sep 17 00:00:00 2001
From: kkostiuk <kateryna.kostiuk@savoirfairelinux.com>
Date: Thu, 29 Apr 2021 10:24:19 -0400
Subject: [PATCH] contact request: check if contact added

Check if contact already added when receiving incoming contact request

Change-Id: Ib04452d8f124e2d66b2c39f3e74548308cab1d48
---
 Ring/Ring/Services/ContactsService.swift | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/Ring/Ring/Services/ContactsService.swift b/Ring/Ring/Services/ContactsService.swift
index b5b5b8eb9..4af5e0b3a 100644
--- a/Ring/Ring/Services/ContactsService.swift
+++ b/Ring/Ring/Services/ContactsService.swift
@@ -139,6 +139,12 @@ class ContactsService {
             return ContactRequestModel(withDictionary: dictionary, accountId: accountId)
         }) {
             for contactRequest in contactRequests {
+                let validContact = self.contacts.value.filter { contact in
+                    contact.hash == contactRequest.ringId && !contact.banned
+                }.first
+                if validContact != nil {
+                    return
+                }
                 if self.contactRequest(withRingId: contactRequest.ringId) == nil {
                     var values = self.contactRequests.value
                     values.append(contactRequest)
@@ -154,6 +160,7 @@ class ContactsService {
             let success = self.contactsAdapter.acceptTrustRequest(fromContact: contactRequest.ringId,
                                                                   withAccountId: account.id)
             if success {
+                self.removeContactRequest(withRingId: contactRequest.ringId)
                 var stringImage: String?
                 if let vCard = contactRequest.vCard, let image = vCard.imageData {
                     stringImage = image.base64EncodedString()
@@ -305,7 +312,13 @@ extension ContactsService: ContactsAdapterDelegate {
         if let contactVCard = CNContactVCardSerialization.parseToVCard(data: payload) {
             vCard = contactVCard
         }
-
+        // check if contact exists
+        let validContact = self.contacts.value.filter { contact in
+            contact.hash == senderAccount && !contact.banned
+        }.first
+        if validContact != nil {
+            return
+        }
         //Update trust request list
         if self.contactRequest(withRingId: senderAccount) == nil {
             let contactRequest = ContactRequestModel(withRingId: senderAccount,
-- 
GitLab