[CNContact] CNContact fix history logs contacts link

This commit is contained in:
Brieuc Viel 2017-11-09 14:41:20 +01:00
parent 24733a0615
commit 8c0f1d2315
4 changed files with 65 additions and 43 deletions

View file

@ -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<CNLabeledValue<CNInstantMessageAddress *> *>
@ -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;
}

View file

@ -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;

View file

@ -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 {

View file

@ -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