diff --git a/Classes/Contact.m b/Classes/Contact.m index e143728fa..5b1b79e41 100644 --- a/Classes/Contact.m +++ b/Classes/Contact.m @@ -230,12 +230,20 @@ NSString *normSip = NULL; if (_person && ![sip isEqualToString:@" "]) { if ((index + 1) > [_person.instantMessageAddresses count]) { - normSip = - [FastAddressBook normalizeSipURI:[sip substringFromIndex:1]]; - CNInstantMessageAddress *cNSipMsgAddr = [ - [CNInstantMessageAddress alloc] - initWithUsername:[normSip componentsSeparatedByString:@"@"][0] - service:[normSip componentsSeparatedByString:@"@"][1]]; + if ([sip hasPrefix:@" "]) + normSip = [sip substringFromIndex:1]; + else + normSip = sip; + CNInstantMessageAddress *cNSipMsgAddr; + if ([normSip containsString:@"@"]) + cNSipMsgAddr = [[CNInstantMessageAddress alloc] + initWithUsername:[normSip componentsSeparatedByString:@"@"][0] + service:[normSip + componentsSeparatedByString:@"@"][1]]; + else + cNSipMsgAddr = + [[CNInstantMessageAddress alloc] initWithUsername:normSip + service:normSip]; CNLabeledValue *sipAddress = [CNLabeledValue labeledValueWithLabel:NULL value:cNSipMsgAddr]; NSMutableArray *> @@ -244,7 +252,8 @@ [_person setValue:tmpSipAddress forKey:CNContactInstantMessageAddressesKey]; ret = TRUE; - _sipAddresses[index] = [sip substringFromIndex:1]; + _sipAddresses[index] = normSip; + //_sipAddresses[index] = [sip substringFromIndex:1]; } else { normSip = sip; CNInstantMessageAddress *cNSipMsgAddr; @@ -272,7 +281,7 @@ } if (ret) { - _sipAddresses[index] = sip; + _sipAddresses[index] = [FastAddressBook normalizeSipURI:sip]; } return ret; } @@ -389,7 +398,10 @@ } } if (ret) { - [_sipAddresses addObject:sip]; + if ([sip hasPrefix:@" "]) + [_sipAddresses addObject:[sip substringFromIndex:1]]; + else + [_sipAddresses addObject:[FastAddressBook normalizeSipURI:sip]]; } return ret; } diff --git a/Classes/ContactDetailsTableView.m b/Classes/ContactDetailsTableView.m index bf44219bd..5cf4daa2d 100644 --- a/Classes/ContactDetailsTableView.m +++ b/Classes/ContactDetailsTableView.m @@ -196,7 +196,8 @@ value = _contact.emails[indexPath.row]; [cell.editTextfield setKeyboardType:UIKeyboardTypeEmailAddress]; } - + if ([value hasPrefix:@" "]) + value = [value substringFromIndex:1]; [cell setAddress:value]; return cell; diff --git a/Classes/Utils/FastAddressBook.m b/Classes/Utils/FastAddressBook.m index 754092fc8..7df7be63e 100644 --- a/Classes/Utils/FastAddressBook.m +++ b/Classes/Utils/FastAddressBook.m @@ -52,12 +52,17 @@ } + (Contact *)getContact:(NSString *)address { - if (LinphoneManager.instance.fastAddressBook != nil) { - @synchronized(LinphoneManager.instance.fastAddressBook.addressBookMap) { - return [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; - } - } - return nil; + + for (id key in LinphoneManager.instance.fastAddressBook.addressBookMap) { + Contact *contact = + (Contact *)[LinphoneManager.instance.fastAddressBook.addressBookMap + objectForKey:key]; + if ([contact.sipAddresses count]) { + if ([contact.sipAddresses containsObject:address]) + return contact; + } + } + return nil; } + (Contact *)getContactWithAddress:(const LinphoneAddress *)address { diff --git a/Classes/Utils/Utils.m b/Classes/Utils/Utils.m index 843ed7313..f2c47a610 100644 --- a/Classes/Utils/Utils.m +++ b/Classes/Utils/Utils.m @@ -465,37 +465,41 @@ normvalue = value.UTF8String; } LinphoneAddress *addr = linphone_proxy_config_normalize_sip_uri(cfg, normvalue); - // first try to find a friend with the given address Contact *c = [FastAddressBook getContactWithAddress:addr]; - if (c && c.friend) { - LinphoneFriend *f = c.friend; - const LinphonePresenceModel *m = - f ? linphone_friend_get_presence_model_for_uri_or_tel(f, value.UTF8String) : NULL; - const char *contact = m ? linphone_presence_model_get_contact(m) : NULL; - if (contact) { - LinphoneAddress *contact_addr = linphone_address_new(contact); - if (contact_addr) { - linphone_address_destroy(addr); - return contact_addr; - } - } - } - // since user wants to escape plus, we assume it expects to have phone numbers by default - if (addr) { - if (cfg && (linphone_proxy_config_get_dial_escape_plus(cfg))) { - if (linphone_proxy_config_is_phone_number(cfg, normvalue)) { - linphone_address_set_username(addr, normvalue); - } - } else { - if (linphone_proxy_config_is_phone_number(cfg, value.UTF8String)) { - linphone_address_set_username(addr, value.UTF8String); - } - } - } + if (c && c.friend) { + LinphoneFriend *f = c.friend; + const LinphonePresenceModel *m = + f ? linphone_friend_get_presence_model_for_uri_or_tel( + f, value.UTF8String) + : NULL; + const char *contact = + m ? linphone_presence_model_get_contact(m) : NULL; + if (contact) { + LinphoneAddress *contact_addr = linphone_address_new(contact); + if (contact_addr) { + linphone_address_destroy(addr); + return contact_addr; + } + } + } - return addr; + // since user wants to escape plus, we assume it expects to have phone + // numbers by default + if (addr) { + if (cfg && (linphone_proxy_config_get_dial_escape_plus(cfg))) { + if (linphone_proxy_config_is_phone_number(cfg, normvalue)) { + linphone_address_set_username(addr, normvalue); + } + } else { + if (linphone_proxy_config_is_phone_number(cfg, value.UTF8String)) { + linphone_address_set_username(addr, value.UTF8String); + } + } + } + + return addr; } @end