diff --git a/Classes/Contact.m b/Classes/Contact.m index 4974e1339..f868d5e23 100644 --- a/Classes/Contact.m +++ b/Classes/Contact.m @@ -39,10 +39,9 @@ if ([_person respondsToSelector:NSSelectorFromString( CNInstantMessageAddressUsernameKey)] || [_person respondsToSelector:NSSelectorFromString(CNContactInstantMessageAddressesKey)]) { if (_person.instantMessageAddresses != NULL) { for (CNLabeledValue *sipAddr in _person.instantMessageAddresses) { - NSString *username = sipAddr.value.username; - NSString *service = sipAddr.value.service; - if (username && ([service isEqualToString:LinphoneManager.instance.contactSipField] || ([service isEqualToString:@"INSTANT_MESSAGING_NAME"] && [FastAddressBook isSipURI:username]))){ - [_sipAddresses addObject:username]; + if ([FastAddressBook isSipAddress:sipAddr]) { + NSString *username = sipAddr.value.username; + [_sipAddresses addObject:username]; } } } diff --git a/Classes/ContactDetailsTableView.m b/Classes/ContactDetailsTableView.m index a7685e5bc..19c1cc99b 100644 --- a/Classes/ContactDetailsTableView.m +++ b/Classes/ContactDetailsTableView.m @@ -102,11 +102,8 @@ NSInteger count = 0; if (mCNContact.instantMessageAddresses != NULL) { for (CNLabeledValue *sipAddr in mCNContact.instantMessageAddresses) { - NSString *username = sipAddr.value.username; - NSString *service = sipAddr.value.service; - if (username && ([service isEqualToString:LinphoneManager.instance.contactSipField] || ([service isEqualToString:@"INSTANT_MESSAGING_NAME"] && [FastAddressBook isSipURI:username]))){ - count ++; - } + if ([FastAddressBook isSipAddress:sipAddr]) + count++; } } return count; diff --git a/Classes/Utils/FastAddressBook.h b/Classes/Utils/FastAddressBook.h index 2c7224830..1d008b036 100644 --- a/Classes/Utils/FastAddressBook.h +++ b/Classes/Utils/FastAddressBook.h @@ -51,8 +51,9 @@ + (NSString *)displayNameForContact:(Contact *)person; + (NSString *)displayNameForAddress:(const LinphoneAddress *)addr; -+ (BOOL)isSipURI:(NSString *)address; // should be removed -+ (NSString *)normalizeSipURI:(NSString *)address; // should be removed ++ (BOOL)isSipURI:(NSString *)address; ++ (BOOL)isSipAddress:(CNLabeledValue *)sipAddr; ++ (NSString *)normalizeSipURI:(NSString *)address; + (NSString *)localizedLabel:(NSString *)label; - (void)registerAddrsFor:(Contact *)contact; diff --git a/Classes/Utils/FastAddressBook.m b/Classes/Utils/FastAddressBook.m index 7378e20b6..9b6ec51a1 100644 --- a/Classes/Utils/FastAddressBook.m +++ b/Classes/Utils/FastAddressBook.m @@ -89,6 +89,21 @@ return [address hasPrefix:@"sip:"] || [address hasPrefix:@"sips:"]; } ++ (BOOL)isSipAddress:(CNLabeledValue *)sipAddr { + NSString *username = sipAddr.value.username; + NSString *service = sipAddr.value.service; + if (!username) + return FALSE; + + if ([service isEqualToString:LinphoneManager.instance.contactSipField]) + return TRUE; + + if (([service isEqualToString:@"INSTANT_MESSAGING_NAME"] || [service isEqualToString:@"IM_SERVICE_NAME"]) && [FastAddressBook isSipURI:username]) + return TRUE; + + return FALSE; +} + + (NSString *)normalizeSipURI:(NSString *)address { // replace all whitespaces (non-breakable, utf8 nbsp etc.) by the "classical" whitespace NSString *normalizedSipAddress = nil;