From b750122aeb4a1d8c1b889802e2363b2a48dc7933 Mon Sep 17 00:00:00 2001 From: Giom Foret Date: Tue, 20 Jun 2017 14:36:14 +0200 Subject: [PATCH] Bug Fix - Contact search: Unexpected empty search result. To reproduce: 1- search with "tst" pattern 2- erase the 2 last characters of the pattern to set "test" -> empty result NOK --- Riot/Model/Contact/ContactsDataSource.m | 27 ++++++++++++++++--------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/Riot/Model/Contact/ContactsDataSource.m b/Riot/Model/Contact/ContactsDataSource.m index de0179948..5c880b241 100644 --- a/Riot/Model/Contact/ContactsDataSource.m +++ b/Riot/Model/Contact/ContactsDataSource.m @@ -148,14 +148,13 @@ { // Update search results. searchText = [searchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]]; + NSMutableArray *unfilteredLocalContacts; + NSMutableArray *unfilteredMatrixContacts; searchProcessingCount++; if (!searchText.length) { - searchProcessingLocalContacts = nil; - searchProcessingMatrixContacts = nil; - // Disclose by default the sections if a search was in progress. if (searchProcessingText.length) { @@ -164,18 +163,28 @@ } else if (forceRefresh || !searchProcessingText.length || [searchText hasPrefix:searchProcessingText] == NO) { - // Retrieve all the local contacts - searchProcessingLocalContacts = [self unfilteredLocalContactsArray]; - - // Retrieve all known matrix users - searchProcessingMatrixContacts = [self unfilteredMatrixContactsArray]; + // Prepare on the main thread the arrays used to initialize the search on the processing queue. + unfilteredLocalContacts = [self unfilteredLocalContactsArray]; + unfilteredMatrixContacts = [self unfilteredMatrixContactsArray]; // Disclose the sections shrinkedSectionsBitMask = 0; } dispatch_async(searchProcessingQueue, ^{ - + + // Reset the current arrays if it is required + if (!searchText.length) + { + searchProcessingLocalContacts = nil; + searchProcessingMatrixContacts = nil; + } + else if (unfilteredLocalContacts) + { + searchProcessingLocalContacts = unfilteredLocalContacts; + searchProcessingMatrixContacts = unfilteredMatrixContacts; + } + for (NSUInteger index = 0; index < searchProcessingLocalContacts.count;) { MXKContact* contact = searchProcessingLocalContacts[index];