From 0fc673f941b7ce51b348488ac7a38975186d7c2b Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Mon, 30 Apr 2018 15:51:16 +0200 Subject: [PATCH 01/15] start dev --- Classes/ChatConversationCreateTableView.h | 4 +- Classes/ChatConversationCreateTableView.m | 59 +++++++++++------------ 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.h b/Classes/ChatConversationCreateTableView.h index e4e97087b..5de6fc8d4 100644 --- a/Classes/ChatConversationCreateTableView.h +++ b/Classes/ChatConversationCreateTableView.h @@ -9,10 +9,12 @@ #import @interface ChatConversationCreateTableView : UITableViewController -@property(weak, nonatomic) IBOutlet UISearchBar *searchBar; @property(nonatomic) Boolean allFilter; @property(nonatomic) Boolean notFirstTime; @property(nonatomic, strong) NSMutableArray *contactsGroup; +@property(nonatomic) LinphoneMagicSearch *magicSearch; + +@property(weak, nonatomic) IBOutlet UISearchBar *searchBar; @property (weak, nonatomic) IBOutlet UICollectionView *collectionView; @property (weak, nonatomic) IBOutlet UIIconButton *controllerNextButton; @property (weak, nonatomic) IBOutlet UIView *waitView; diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index c3f756717..294e40ae1 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -23,15 +23,6 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; - _allContacts = [[NSMutableDictionary alloc] initWithDictionary:LinphoneManager.instance.fastAddressBook.addressBookMap]; - _sortedAddresses = [[LinphoneManager.instance.fastAddressBook.addressBookMap allKeys] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { - Contact* first = [_allContacts objectForKey:a]; - Contact* second = [_allContacts objectForKey:b]; - if([[first.firstName lowercaseString] compare:[second.firstName lowercaseString]] == NSOrderedSame) - return [[first.lastName lowercaseString] compare:[second.lastName lowercaseString]]; - else - return [[first.firstName lowercaseString] compare:[second.firstName lowercaseString]]; - }]; int y = _contactsGroup.count > 0 ? _collectionView.frame.origin.y + _collectionView.frame.size.height @@ -47,7 +38,7 @@ } completion:nil]; - _addresses = [[NSMutableArray alloc] initWithCapacity:_sortedAddresses.count]; + _addresses = [[NSMutableArray alloc] initWithCapacity:LinphoneManager.instance.fastAddressBook.addressBookMap.allKeys.count]; if(_notFirstTime) { for(NSString *addr in _contactsGroup) { [_collectionView registerClass:UIChatCreateCollectionViewCell.class forCellWithReuseIdentifier:addr]; @@ -59,10 +50,13 @@ [_searchBar setText:@""]; [self searchBar:_searchBar textDidChange:_searchBar.text]; self.tableView.accessibilityIdentifier = @"Suggested addresses"; + _magicSearch = linphone_core_create_magic_search(LC); } - (void) viewWillDisappear:(BOOL)animated { _notFirstTime = FALSE; + linphone_magic_search_unref(_magicSearch); + _magicSearch = NULL; } - (void) loadData { @@ -72,34 +66,33 @@ - (void)reloadDataWithFilter:(NSString *)filter { [_addresses removeAllObjects]; - for (NSString* key in _sortedAddresses) { - Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:key]; + if (!_magicSearch) + return; + + bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, ""); + + while (results) { + LinphoneSearchResult *result = results->data; + const LinphoneAddress* addr = linphone_search_result_get_address(result) ?: linphone_friend_get_address(linphone_search_result_get_friend(result)); + char *uri = linphone_address_as_string_uri_only(addr); + NSString *address = [NSString stringWithUTF8String:uri]; + ms_free(uri); + + Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; NSString *name = [FastAddressBook displayNameForContact:contact]; Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] - || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); + || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); BOOL add = _allFilter || linphoneContact; if (((filter.length == 0) - || ([name.lowercaseString containsSubstring:filter.lowercaseString]) - || ([key.lowercaseString containsSubstring:filter.lowercaseString])) + || ([name.lowercaseString containsSubstring:filter.lowercaseString]) + || ([address.lowercaseString containsSubstring:filter.lowercaseString])) && add) - [_addresses addObject:key]; + [_addresses addObject:address]; + + results = results->next; } - // also add current entry, if not listed - NSString *nsuri = filter.lowercaseString; - LinphoneAddress *addr = [LinphoneUtils normalizeSipOrPhoneAddress:nsuri]; - if (addr) { - char *uri = linphone_address_as_string(addr); - nsuri = [NSString stringWithUTF8String:uri]; - ms_free(uri); - linphone_address_destroy(addr); - } - - if (nsuri.length > 0 && ![_addresses containsObject:nsuri]) - [_addresses addObject:nsuri]; - - [self.tableView reloadData]; } @@ -220,8 +213,12 @@ - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText { searchBar.showsCancelButton = (searchText.length > 0); [self reloadDataWithFilter:searchText]; - if ([searchText isEqualToString:@""]) + if ([searchText isEqualToString:@""]) { + if (_magicSearch) + linphone_magic_search_reset_search_cache(_magicSearch); + [_searchBar resignFirstResponder]; + } } - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { From 882e121be062cd4327b9a6299cb3f663dd888b2c Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Thu, 3 May 2018 14:29:20 +0200 Subject: [PATCH 02/15] lil fix --- Classes/ChatConversationCreateTableView.m | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index 294e40ae1..a97d5194d 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -24,6 +24,7 @@ - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; + _magicSearch = linphone_core_create_magic_search(LC); int y = _contactsGroup.count > 0 ? _collectionView.frame.origin.y + _collectionView.frame.size.height : _searchBar.frame.origin.y + _searchBar.frame.size.height; @@ -50,7 +51,6 @@ [_searchBar setText:@""]; [self searchBar:_searchBar textDidChange:_searchBar.text]; self.tableView.accessibilityIdentifier = @"Suggested addresses"; - _magicSearch = linphone_core_create_magic_search(LC); } - (void) viewWillDisappear:(BOOL)animated { @@ -70,7 +70,6 @@ return; bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, ""); - while (results) { LinphoneSearchResult *result = results->data; const LinphoneAddress* addr = linphone_search_result_get_address(result) ?: linphone_friend_get_address(linphone_search_result_get_friend(result)); From 4c3a7be94170684a2550b4db6fc1977c31724ed6 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Fri, 11 May 2018 10:51:00 +0200 Subject: [PATCH 03/15] fix crash --- Classes/ChatConversationCreateTableView.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index a97d5194d..3c7a8d438 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -73,6 +73,9 @@ while (results) { LinphoneSearchResult *result = results->data; const LinphoneAddress* addr = linphone_search_result_get_address(result) ?: linphone_friend_get_address(linphone_search_result_get_friend(result)); + if (!addr) + continue; + char *uri = linphone_address_as_string_uri_only(addr); NSString *address = [NSString stringWithUTF8String:uri]; ms_free(uri); From e8376174e7a52a92c1ed2b930214410161fa32be Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Tue, 15 May 2018 11:13:08 +0200 Subject: [PATCH 04/15] prevent freeze of search bar [Switch submodule branch] --- Classes/ChatConversationCreateTableView.m | 35 ++++++++++++----------- submodules/bctoolbox | 2 +- submodules/belr | 2 +- submodules/linphone | 2 +- 4 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index 3c7a8d438..f493a0efb 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -72,26 +72,27 @@ bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, ""); while (results) { LinphoneSearchResult *result = results->data; - const LinphoneAddress* addr = linphone_search_result_get_address(result) ?: linphone_friend_get_address(linphone_search_result_get_friend(result)); - if (!addr) - continue; - - char *uri = linphone_address_as_string_uri_only(addr); - NSString *address = [NSString stringWithUTF8String:uri]; - ms_free(uri); + const LinphoneFriend *friend = linphone_search_result_get_friend(result); + const LinphoneAddress* addr = linphone_search_result_get_address(result); + if (friend) { - Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; - NSString *name = [FastAddressBook displayNameForContact:contact]; - Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] - || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); - BOOL add = _allFilter || linphoneContact; + } else if (addr) { + char *uri = linphone_address_as_string_uri_only(addr); + NSString *address = [NSString stringWithUTF8String:uri]; + ms_free(uri); - if (((filter.length == 0) - || ([name.lowercaseString containsSubstring:filter.lowercaseString]) - || ([address.lowercaseString containsSubstring:filter.lowercaseString])) - && add) - [_addresses addObject:address]; + Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; + NSString *name = [FastAddressBook displayNameForContact:contact]; + Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] + || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); + BOOL add = _allFilter || linphoneContact; + if (((filter.length == 0) + || ([name.lowercaseString containsSubstring:filter.lowercaseString]) + || ([address.lowercaseString containsSubstring:filter.lowercaseString])) + && add) + [_addresses addObject:address]; + } results = results->next; } diff --git a/submodules/bctoolbox b/submodules/bctoolbox index 7df8b5ca0..dd0b0925e 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit 7df8b5ca085010ec35103414ed9582412aaff97d +Subproject commit dd0b0925e1aea3ae2a17481077319ed7ab2f203e diff --git a/submodules/belr b/submodules/belr index 18abde9e4..8e841b047 160000 --- a/submodules/belr +++ b/submodules/belr @@ -1 +1 @@ -Subproject commit 18abde9e43e8f98e22c09afee3e089c4e7691173 +Subproject commit 8e841b047641b1812a83880a90e89d702747ca5b diff --git a/submodules/linphone b/submodules/linphone index 716ceeb47..51d5589ed 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 716ceeb474a415d685ca0f8377c3bf20819f9866 +Subproject commit 51d5589edf03ae07ca45f734c7a329cc1355c1ad From ea599fff98bb9b72456fb60013d35383c53ea9c5 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Fri, 18 May 2018 16:43:59 +0200 Subject: [PATCH 05/15] improve magic search handling --- Classes/ChatConversationCreateTableView.m | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index f493a0efb..106fed96e 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -72,19 +72,16 @@ bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, ""); while (results) { LinphoneSearchResult *result = results->data; - const LinphoneFriend *friend = linphone_search_result_get_friend(result); - const LinphoneAddress* addr = linphone_search_result_get_address(result); - if (friend) { - - } else if (addr) { + const LinphoneAddress *addr = linphone_search_result_get_address(result); + const char *phoneNumber = linphone_search_result_get_phone_number(result); + if (addr) { char *uri = linphone_address_as_string_uri_only(addr); NSString *address = [NSString stringWithUTF8String:uri]; ms_free(uri); - Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; NSString *name = [FastAddressBook displayNameForContact:contact]; Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] - || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); + || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); BOOL add = _allFilter || linphoneContact; if (((filter.length == 0) @@ -92,6 +89,8 @@ || ([address.lowercaseString containsSubstring:filter.lowercaseString])) && add) [_addresses addObject:address]; + } else if (phoneNumber) { + } results = results->next; } @@ -224,6 +223,13 @@ } } +- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(nonnull NSString *)text { + if (text.length < _searchBar.text.length && _magicSearch) + linphone_magic_search_reset_search_cache(_magicSearch); + + return TRUE; +} + - (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar { [searchBar setShowsCancelButton:FALSE animated:TRUE]; } @@ -237,6 +243,9 @@ } - (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar { + if (_magicSearch) + linphone_magic_search_reset_search_cache(_magicSearch); + [searchBar resignFirstResponder]; } From 9b20e835f60abf1b24c814015cbb6e94f2608f7d Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Mon, 21 May 2018 15:16:48 +0200 Subject: [PATCH 06/15] fix include path --- Classes/ChatConversationTableView.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Classes/ChatConversationTableView.h b/Classes/ChatConversationTableView.h index 940e3465a..aae766894 100644 --- a/Classes/ChatConversationTableView.h +++ b/Classes/ChatConversationTableView.h @@ -20,8 +20,8 @@ #import #include "linphone/linphonecore.h" -#import "linphone/c-event-log.h" -#import "linphone/c-chat-room.h" +#import "linphone/api/c-event-log.h" +#import "linphone/api/c-chat-room.h" #import "UICheckBoxTableView.h" From a16577eafd9979b6634ab9110dfb225c94d8e556 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Mon, 21 May 2018 15:17:19 +0200 Subject: [PATCH 07/15] update linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 00d695d77..1cbfe4e49 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 00d695d77f6e0e8e528ca1b7385fafa14d306c1d +Subproject commit 1cbfe4e499e0f089527fe7e8d1ffeb91c89cc0b0 From 42b09ad3ef4ebf02c3545ed836aa26e9babcc4ba Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Mon, 21 May 2018 15:53:24 +0200 Subject: [PATCH 08/15] continue integration of magic search bar --- Classes/ChatConversationCreateTableView.m | 40 +++++++++++------------ 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index 106fed96e..b8b0e2a27 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -15,8 +15,6 @@ @interface ChatConversationCreateTableView () @property(nonatomic, strong) NSMutableArray *addresses; -@property(nonatomic, strong) NSDictionary *allContacts; -@property(nonatomic, strong) NSArray *sortedAddresses; @end @implementation ChatConversationCreateTableView @@ -69,29 +67,31 @@ if (!_magicSearch) return; - bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, ""); + bctbx_list_t *results = linphone_magic_search_get_contact_list_from_filter(_magicSearch, filter.UTF8String, _allFilter ? "" : "*"); while (results) { LinphoneSearchResult *result = results->data; const LinphoneAddress *addr = linphone_search_result_get_address(result); const char *phoneNumber = linphone_search_result_get_phone_number(result); - if (addr) { - char *uri = linphone_address_as_string_uri_only(addr); - NSString *address = [NSString stringWithUTF8String:uri]; - ms_free(uri); - Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; - NSString *name = [FastAddressBook displayNameForContact:contact]; - Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] - || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); - BOOL add = _allFilter || linphoneContact; - - if (((filter.length == 0) - || ([name.lowercaseString containsSubstring:filter.lowercaseString]) - || ([address.lowercaseString containsSubstring:filter.lowercaseString])) - && add) - [_addresses addObject:address]; - } else if (phoneNumber) { - + if (!addr) { + LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC); + const char *normalizedPhoneNumber = linphone_proxy_config_normalize_phone_number(cfg, phoneNumber); + addr = linphone_proxy_config_normalize_sip_uri(cfg, normalizedPhoneNumber); } + char *uri = linphone_address_as_string_uri_only(addr); + NSString *address = [NSString stringWithUTF8String:uri]; + ms_free(uri); + Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; + NSString *name = [FastAddressBook displayNameForContact:contact]; + Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] + || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); + BOOL add = _allFilter || linphoneContact; + + if (((filter.length == 0) + || ([name.lowercaseString containsSubstring:filter.lowercaseString]) + || ([address.lowercaseString containsSubstring:filter.lowercaseString])) + && add) + [_addresses addObject:address]; + results = results->next; } From 39048ab01faa432d92f324346b777730c13bcc5f Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Mon, 21 May 2018 16:34:08 +0200 Subject: [PATCH 09/15] reset search cache when needed --- Classes/ChatConversationCreateView.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Classes/ChatConversationCreateView.m b/Classes/ChatConversationCreateView.m index 27f2929fa..b0e9a6a8d 100644 --- a/Classes/ChatConversationCreateView.m +++ b/Classes/ChatConversationCreateView.m @@ -117,6 +117,9 @@ typedef enum { ContactsAll, ContactsLinphone, ContactsMAX } ContactsCategory; - (void)changeView:(ContactsCategory)view { CGRect frame = _selectedButtonImage.frame; + if (_tableController.magicSearch) + linphone_magic_search_reset_search_cache(_tableController.magicSearch); + if (view == ContactsAll && !_allButton.selected) { frame.origin.x = _allButton.frame.origin.x; _allButton.selected = TRUE; From f8211b9d03073860c096883db7db8a3ef6c63035 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Mon, 21 May 2018 16:38:29 +0200 Subject: [PATCH 10/15] optimization --- Classes/ChatConversationCreateTableView.m | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index b8b0e2a27..22e55fc81 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -71,8 +71,11 @@ while (results) { LinphoneSearchResult *result = results->data; const LinphoneAddress *addr = linphone_search_result_get_address(result); - const char *phoneNumber = linphone_search_result_get_phone_number(result); if (!addr) { + const char *phoneNumber = linphone_search_result_get_phone_number(result); + if (!phoneNumber) + continue; + LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC); const char *normalizedPhoneNumber = linphone_proxy_config_normalize_phone_number(cfg, phoneNumber); addr = linphone_proxy_config_normalize_sip_uri(cfg, normalizedPhoneNumber); @@ -80,7 +83,7 @@ char *uri = linphone_address_as_string_uri_only(addr); NSString *address = [NSString stringWithUTF8String:uri]; ms_free(uri); - Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; + /*Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; NSString *name = [FastAddressBook displayNameForContact:contact]; Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); @@ -89,7 +92,7 @@ if (((filter.length == 0) || ([name.lowercaseString containsSubstring:filter.lowercaseString]) || ([address.lowercaseString containsSubstring:filter.lowercaseString])) - && add) + && add)*/ [_addresses addObject:address]; results = results->next; From 4f78f51e17bfe839e864794d8f4aecc526ad223c Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Tue, 22 May 2018 13:52:14 +0200 Subject: [PATCH 11/15] do not display false number linphone address --- Classes/ChatConversationCreateTableView.m | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index 22e55fc81..a3777dfed 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -15,6 +15,7 @@ @interface ChatConversationCreateTableView () @property(nonatomic, strong) NSMutableArray *addresses; +@property(nonatomic, strong) NSMutableArray *phoneOrAddr; @end @implementation ChatConversationCreateTableView @@ -38,6 +39,7 @@ completion:nil]; _addresses = [[NSMutableArray alloc] initWithCapacity:LinphoneManager.instance.fastAddressBook.addressBookMap.allKeys.count]; + _phoneOrAddr = [[NSMutableArray alloc] initWithCapacity:LinphoneManager.instance.fastAddressBook.addressBookMap.allKeys.count]; if(_notFirstTime) { for(NSString *addr in _contactsGroup) { [_collectionView registerClass:UIChatCreateCollectionViewCell.class forCellWithReuseIdentifier:addr]; @@ -63,6 +65,7 @@ - (void)reloadDataWithFilter:(NSString *)filter { [_addresses removeAllObjects]; + [_phoneOrAddr removeAllObjects]; if (!_magicSearch) return; @@ -71,8 +74,9 @@ while (results) { LinphoneSearchResult *result = results->data; const LinphoneAddress *addr = linphone_search_result_get_address(result); + const char *phoneNumber = NULL; if (!addr) { - const char *phoneNumber = linphone_search_result_get_phone_number(result); + phoneNumber = linphone_search_result_get_phone_number(result); if (!phoneNumber) continue; @@ -93,7 +97,8 @@ || ([name.lowercaseString containsSubstring:filter.lowercaseString]) || ([address.lowercaseString containsSubstring:filter.lowercaseString])) && add)*/ - [_addresses addObject:address]; + [_addresses addObject:address]; + [_phoneOrAddr addObject:phoneNumber ? [NSString stringWithUTF8String:phoneNumber] : address]; results = results->next; } @@ -118,6 +123,7 @@ cell = [[UIChatCreateCell alloc] initWithIdentifier:kCellId]; NSString *key = [_addresses objectAtIndex:indexPath.row]; + NSString *phoneOrAddr = [_phoneOrAddr objectAtIndex:indexPath.row]; Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:key]; Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); @@ -127,7 +133,7 @@ cell.linphoneImage.hidden = !linphoneContact; cell.displayNameLabel.text = [FastAddressBook displayNameForAddress:addr]; - cell.addressLabel.text = [NSString stringWithUTF8String:linphone_address_as_string(addr)]; + cell.addressLabel.text = linphoneContact ? [NSString stringWithUTF8String:linphone_address_as_string(addr)] : phoneOrAddr; cell.selectedImage.hidden = ![_contactsGroup containsObject:cell.addressLabel.text]; return cell; } From b97ee0988b9c9a53960c8fa3b348a6a5a4ffe340 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Tue, 22 May 2018 14:01:18 +0200 Subject: [PATCH 12/15] remove useless commented code --- Classes/ChatConversationCreateTableView.m | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/Classes/ChatConversationCreateTableView.m b/Classes/ChatConversationCreateTableView.m index a3777dfed..2d2773997 100644 --- a/Classes/ChatConversationCreateTableView.m +++ b/Classes/ChatConversationCreateTableView.m @@ -87,16 +87,6 @@ char *uri = linphone_address_as_string_uri_only(addr); NSString *address = [NSString stringWithUTF8String:uri]; ms_free(uri); - /*Contact *contact = [LinphoneManager.instance.fastAddressBook.addressBookMap objectForKey:address]; - NSString *name = [FastAddressBook displayNameForContact:contact]; - Boolean linphoneContact = [FastAddressBook contactHasValidSipDomain:contact] - || (contact.friend && linphone_presence_model_get_basic_status(linphone_friend_get_presence_model(contact.friend)) == LinphonePresenceBasicStatusOpen); - BOOL add = _allFilter || linphoneContact; - - if (((filter.length == 0) - || ([name.lowercaseString containsSubstring:filter.lowercaseString]) - || ([address.lowercaseString containsSubstring:filter.lowercaseString])) - && add)*/ [_addresses addObject:address]; [_phoneOrAddr addObject:phoneNumber ? [NSString stringWithUTF8String:phoneNumber] : address]; From fd9cf1e3871351e3efba19ce6e6551cac39b49f3 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Wed, 23 May 2018 16:01:16 +0200 Subject: [PATCH 13/15] fix crash --- Classes/ChatConversationCreateView.m | 9 ++++++++- Classes/Utils/Utils.m | 9 ++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/Classes/ChatConversationCreateView.m b/Classes/ChatConversationCreateView.m index b0e9a6a8d..72d225601 100644 --- a/Classes/ChatConversationCreateView.m +++ b/Classes/ChatConversationCreateView.m @@ -165,7 +165,14 @@ typedef enum { ContactsAll, ContactsLinphone, ContactsMAX } ContactsCategory; UIChatCreateCollectionViewCell *cell = (UIChatCreateCollectionViewCell *)[_collectionView dequeueReusableCellWithReuseIdentifier:uri forIndexPath:indexPath]; cell.controller = self; cell.uri = uri; - LinphoneAddress *addr = linphone_address_new(uri.UTF8String); + LinphoneAddress *addr = NULL; + LinphoneProxyConfig *cfg = linphone_core_get_default_proxy_config(LC); + if (cfg && linphone_proxy_config_is_phone_number(cfg, uri.UTF8String)) { + char *phone = linphone_proxy_config_normalize_phone_number(cfg, uri.UTF8String); + addr = linphone_proxy_config_normalize_sip_uri(cfg, phone); + ms_free(phone); + } else + addr = linphone_address_new(uri.UTF8String); cell = [cell initWithName:[FastAddressBook displayNameForAddress:addr]]; linphone_address_unref(addr); return cell; diff --git a/Classes/Utils/Utils.m b/Classes/Utils/Utils.m index e7061da59..bebbd9fbb 100644 --- a/Classes/Utils/Utils.m +++ b/Classes/Utils/Utils.m @@ -494,11 +494,10 @@ // since user wants to escape plus, we assume it expects to have phone // numbers by default if (addr && cfg) { - if (linphone_proxy_config_get_dial_escape_plus(cfg) && 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); - } + const char *username = linphone_proxy_config_get_dial_escape_plus(cfg) ? normvalue : value.UTF8String; + if (linphone_proxy_config_is_phone_number(cfg, username)) + linphone_address_set_username(addr, username); + } return addr; } From f0b9c696d4d49c6bc90e89598e5e9cf72ab80403 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Thu, 24 May 2018 10:15:04 +0200 Subject: [PATCH 14/15] update linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 1cbfe4e49..3cf801a63 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 1cbfe4e499e0f089527fe7e8d1ffeb91c89cc0b0 +Subproject commit 3cf801a6320522bc022e7b2b790b2400707d17fc From 59ab52c7462b3ba3859c37deb71bd820448cfa75 Mon Sep 17 00:00:00 2001 From: Benjamin Reis Date: Thu, 24 May 2018 17:17:43 +0200 Subject: [PATCH 15/15] update linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 3cf801a63..2731c470c 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 3cf801a6320522bc022e7b2b790b2400707d17fc +Subproject commit 2731c470c42ee1f2e20fa2ea07f67fe031c7be76