Public rooms search: Replace the PublicRoomsDirectoryDataSource.filter by an array of strings PublicRoomsDirectoryDataSource.searchPatternsList.

This commit is contained in:
manuroe
2015-12-21 15:29:57 +01:00
parent 056bf23f4d
commit 94fbcc076f
4 changed files with 25 additions and 21 deletions
@@ -39,13 +39,14 @@
/**
The filter being applied. Nil if there is no filter.
A 'OR' search is made on the strings of the array.
Setting a new value may trigger a request to the home server. So, the data source state
may change to MXKDataSourceStatePreparing.
*/
@property (nonatomic) NSString *filter;
@property (nonatomic) NSArray<NSString*> *searchPatternsList;
/**
Public rooms of the directory that match `filter`.
Public rooms of the directory that match `searchPatternsList`.
*/
@property (nonatomic, readonly) NSArray<MXPublicRoom*> *filteredRooms;
@@ -38,11 +38,14 @@ double const kPublicRoomsDirectoryDataExpiration = 10;
@implementation PublicRoomsDirectoryDataSource
- (void)setFilter:(NSString *)searchTerm
- (void)setSearchPatternsList:(NSArray<NSString *> *)newSearchPatternsList
{
if (![searchTerm isEqualToString:_filter])
NSString *searchPatternsListString = [_searchPatternsList componentsJoinedByString:@""];
NSString *newSearchPatternsListString = [newSearchPatternsList componentsJoinedByString:@""];
if (![newSearchPatternsListString isEqualToString:searchPatternsListString])
{
_filter = searchTerm;
_searchPatternsList = newSearchPatternsList;
[self refreshPublicRooms];
}
}
@@ -114,16 +117,21 @@ double const kPublicRoomsDirectoryDataExpiration = 10;
- (void)refreshFilteredPublicRooms
{
// Apply filter if any
if (_filter)
if (_searchPatternsList)
{
NSMutableArray *filteredRooms = [NSMutableArray array];
for (MXPublicRoom *publicRoom in _rooms)
{
if ([filteredRooms indexOfObjectIdenticalTo:publicRoom] == NSNotFound)
{
if ([publicRoom.displayname rangeOfString:_filter options:NSCaseInsensitiveSearch].location != NSNotFound)
// Do a OR search
for (NSString *pattern in _searchPatternsList)
{
[filteredRooms addObject:publicRoom];
if ([publicRoom.displayname rangeOfString:pattern options:NSCaseInsensitiveSearch].location != NSNotFound)
{
[filteredRooms addObject:publicRoom];
break;
}
}
}
}
+2 -12
View File
@@ -556,7 +556,7 @@
// Manage the public room search results cell outside the recents.
// Show the cell showing the public rooms directory search result
// once a search is active
if (_publicRoomsDirectoryDataSource.filter)
if (_publicRoomsDirectoryDataSource.searchPatternsList)
{
directorySection = sectionIndex;
sectionIndex++;
@@ -682,17 +682,7 @@
if (_publicRoomsDirectoryDataSource)
{
if (patternsList)
{
// Search only on the first pattern
// XXX: Why is it an array?
_publicRoomsDirectoryDataSource.filter = patternsList[0];
}
else
{
_publicRoomsDirectoryDataSource.filter = nil; // = patternsList
}
_publicRoomsDirectoryDataSource.searchPatternsList = patternsList;
}
}