diff --git a/SignalServiceKit/src/Contacts/Contact.m b/SignalServiceKit/src/Contacts/Contact.m index 49d4d6f33..d2c76272d 100644 --- a/SignalServiceKit/src/Contacts/Contact.m +++ b/SignalServiceKit/src/Contacts/Contact.m @@ -345,16 +345,28 @@ NS_ASSUME_NONNULL_BEGIN mergedCNContact.familyName = newCNContact.familyName.ows_stripped; mergedCNContact.nameSuffix = newCNContact.nameSuffix.ows_stripped; } - + + if (mergedCNContact.organizationName.ows_stripped.length < 1) { + mergedCNContact.organizationName = newCNContact.organizationName.ows_stripped; + } + // Phone Numbers - NSSet *existingPhoneNumberSet = [NSSet setWithArray:self.parsedPhoneNumbers]; - + NSSet *existingParsedPhoneNumberSet = [NSSet setWithArray:self.parsedPhoneNumbers]; + NSSet *existingUnparsedPhoneNumberSet = [NSSet setWithArray:self.userTextPhoneNumbers]; + NSMutableArray *> *mergedPhoneNumbers = [mergedCNContact.phoneNumbers mutableCopy]; for (CNLabeledValue *labeledPhoneNumber in newCNContact.phoneNumbers) { + NSString *_Nullable unparsedPhoneNumber = labeledPhoneNumber.value.stringValue; + if ([existingUnparsedPhoneNumberSet containsObject:unparsedPhoneNumber]) { + // Skip phone number if "unparsed" form is a duplicate. + continue; + } PhoneNumber *_Nullable parsedPhoneNumber = [PhoneNumber tryParsePhoneNumberFromUserSpecifiedText:labeledPhoneNumber.value.stringValue]; - if (parsedPhoneNumber && ![existingPhoneNumberSet containsObject:parsedPhoneNumber]) { - [mergedPhoneNumbers addObject:labeledPhoneNumber]; + if (parsedPhoneNumber && [existingParsedPhoneNumberSet containsObject:parsedPhoneNumber]) { + // Skip phone number if "parsed" form is a duplicate. + continue; } + [mergedPhoneNumbers addObject:labeledPhoneNumber]; } mergedCNContact.phoneNumbers = mergedPhoneNumbers;