forked from mirrors/linphone-iphone
[CNContact] CNContact fix history logs contacts link
This commit is contained in:
parent
24733a0615
commit
8c0f1d2315
4 changed files with 65 additions and 43 deletions
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue