소스 검색

moved the code related to providing searchresults into it's own file

Carola Nitz 7 년 전
부모
커밋
49b540c5f1
4개의 변경된 파일320개의 추가작업 그리고 224개의 파일을 삭제
  1. 19 0
      Sources/VLCLibrarySearchDisplayDataSource.h
  2. 285 0
      Sources/VLCLibrarySearchDisplayDataSource.m
  3. 10 224
      Sources/VLCLibraryViewController.m
  4. 6 0
      VLC.xcodeproj/project.pbxproj

+ 19 - 0
Sources/VLCLibrarySearchDisplayDataSource.h

@@ -0,0 +1,19 @@
+/*****************************************************************************
+ * VLCLibrarySearchDisplayDataSource.h
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2017 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Carola Nitz <nitz.carola # gmail.com>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+@interface VLCLibrarySearchDisplayDataSource : NSObject<UITableViewDataSource>
+
+- (NSString *)cellIdentifier;
+- (UINib *)nibclass;
+- (NSManagedObject *)objectAtIndex:(NSUInteger)index;
+- (void)shouldReloadTableForSearchString:(NSString *)searchString searchableFiles:(NSArray *)files;
+@end

+ 285 - 0
Sources/VLCLibrarySearchDisplayDataSource.m

@@ -0,0 +1,285 @@
+/*****************************************************************************
+ * VLCLibrarySearchDisplayDataSource.m
+ * VLC for iOS
+ *****************************************************************************
+ * Copyright (c) 2017 VideoLAN. All rights reserved.
+ * $Id$
+ *
+ * Authors: Carola Nitz <nitz.carola # gmail.com>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+#import "VLCLibrarySearchDisplayDataSource.h"
+#import "VLCPlaylistTableViewCell.h"
+
+static NSString *PlaylistCellIdentifier = @"PlaylistCell";
+
+@interface VLCLibrarySearchDisplayDataSource() <UITableViewDataSource>
+{
+    NSMutableArray *_searchData;
+}
+@end
+
+@implementation VLCLibrarySearchDisplayDataSource
+
+- (instancetype)init
+{
+    self = [super init];
+    if (self) {
+        _searchData = [NSMutableArray new];
+    }
+    return self;
+}
+
+- (NSString *)cellIdentifier
+{
+    return PlaylistCellIdentifier;
+}
+
+- (UINib *)nibclass
+{
+    return [UINib nibWithNibName:@"VLCPlaylistTableViewCell" bundle:nil];
+}
+
+- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
+{
+    @synchronized (_searchData) {
+        return _searchData.count;
+    }
+}
+
+- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
+{
+    VLCPlaylistTableViewCell *cell = (VLCPlaylistTableViewCell *)[tableView dequeueReusableCellWithIdentifier:PlaylistCellIdentifier forIndexPath:indexPath];
+
+    [cell collapsWithAnimation:NO];
+
+    NSInteger row = indexPath.row;
+
+    @synchronized (_searchData) {
+        if (row < _searchData.count)
+            cell.mediaObject = _searchData[row];
+    }
+
+    return cell;
+}
+
+- (NSManagedObject *)objectAtIndex:(NSUInteger)index
+{
+    @synchronized (_searchData) {
+        return index < _searchData.count ? _searchData[index] : nil;
+    }
+}
+
+- (void)removeAllObjects
+{
+    @synchronized (_searchData) {
+        [_searchData removeAllObjects];
+    }
+}
+
+- (void)addObject:(NSManagedObject *)object
+{
+    @synchronized (_searchData) {
+        [_searchData addObject:object];
+    }
+}
+
+- (void)shouldReloadTableForSearchString:(NSString *)searchString searchableFiles:(NSArray *)files
+{
+    [self removeAllObjects];
+    NSRange nameRange;
+
+    for (NSManagedObject *item in files) {
+
+        if ([item isKindOfClass:[MLAlbum class]]) {
+            nameRange = [self _searchAlbum:(MLAlbum *)item forString:searchString];
+        } else if ([item isKindOfClass:[MLAlbumTrack class]]) {
+            nameRange = [self _searchAlbumTrack:(MLAlbumTrack *)item forString:searchString];
+        } else if ([item isKindOfClass:[MLShowEpisode class]]) {
+            nameRange = [self _searchShowEpisode:(MLShowEpisode *)item forString:searchString];
+        } else if ([item isKindOfClass:[MLShow class]]) {
+            nameRange = [self _searchShow:(MLShow *)item forString:searchString];
+        } else if ([item isKindOfClass:[MLLabel class]])
+            nameRange = [self _searchLabel:(MLLabel *)item forString:searchString];
+        else // simple file
+            nameRange = [self _searchFile:(MLFile*)item forString:searchString];
+
+        if (nameRange.location != NSNotFound)
+            [self addObject:item];
+    }
+}
+
+- (NSRange)_searchAlbumTrack:(MLAlbumTrack *)albumTrack forString:(NSString *)searchString
+{
+    NSString *trackTitle = albumTrack.title;
+    NSRange nameRange = [trackTitle rangeOfString:searchString options:NSCaseInsensitiveSearch];
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    NSMutableArray *stringsToSearch = [[NSMutableArray alloc] initWithObjects:trackTitle, nil];
+    if ([albumTrack artist])
+        [stringsToSearch addObject:[albumTrack artist]];
+    if ([albumTrack genre])
+        [stringsToSearch addObject:[albumTrack genre]];
+
+    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
+    NSUInteger substringCount = substrings.count;
+    NSUInteger searchStringCount = stringsToSearch.count;
+
+    for (NSUInteger x = 0; x < substringCount; x++) {
+        for (NSUInteger y = 0; y < searchStringCount; y++) {
+            nameRange = [stringsToSearch[y] rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
+            if (nameRange.location != NSNotFound)
+                break;
+        }
+        if (nameRange.location != NSNotFound)
+            break;
+    }
+    return nameRange;
+}
+
+- (NSRange)_searchAlbum:(MLAlbum *)album forString:(NSString *)searchString
+{
+    NSString *albumName = [album name];
+    NSRange nameRange = [albumName rangeOfString:searchString options:NSCaseInsensitiveSearch];
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    if ([album releaseYear]) {
+        nameRange = [[album releaseYear] rangeOfString:searchString options:NSCaseInsensitiveSearch];
+        if (nameRange.location != NSNotFound)
+            return nameRange;
+    }
+
+    /* split search string into substrings and try again */
+    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
+    NSUInteger substringCount = substrings.count;
+    if (substringCount > 1) {
+        for (NSUInteger x = 0; x < substringCount; x++) {
+            nameRange = [searchString rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
+            if (nameRange.location != NSNotFound)
+                break;
+        }
+    }
+
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    /* search our tracks if we can't find what the user is looking for */
+    NSArray *tracks = [album sortedTracks];
+    NSUInteger trackCount = tracks.count;
+    for (NSUInteger x = 0; x < trackCount; x++) {
+        nameRange = [self _searchAlbumTrack:tracks[x] forString:searchString];
+        if (nameRange.location != NSNotFound)
+            break;
+    }
+    return nameRange;
+}
+
+- (NSRange)_searchShowEpisode:(MLShowEpisode *)episode forString:(NSString *)searchString
+{
+    /* basic search first, then try more complex things */
+    NSString *episodeName = [episode name];
+    NSRange nameRange;
+
+    if (episodeName) {
+        nameRange = [episodeName rangeOfString:searchString options:NSCaseInsensitiveSearch];
+        if (nameRange.location != NSNotFound)
+            return nameRange;
+    }
+
+    /* split search string into substrings and try again */
+    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
+    NSUInteger substringCount = substrings.count;
+    if (substringCount > 1) {
+        for (NSUInteger x = 0; x < substringCount; x++) {
+            nameRange = [searchString rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
+            if (nameRange.location != NSNotFound)
+                break;
+        }
+    }
+
+    return nameRange;
+}
+
+- (NSRange)_searchShow:(MLShow *)mediaShow forString:(NSString *)searchString
+{
+    /* basic search first, then try more complex things */
+    NSRange nameRange = [[mediaShow name] rangeOfString:searchString options:NSCaseInsensitiveSearch];
+
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    /* split search string into substrings and try again */
+    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
+    NSUInteger substringCount = substrings.count;
+    if (substringCount > 1) {
+        for (NSUInteger x = 0; x < substringCount; x++) {
+            nameRange = [searchString rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
+            if (nameRange.location != NSNotFound)
+                break;
+        }
+    }
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    /* user didn't search for our show name, let's do a deeper search on the episodes */
+    NSArray *episodes = [mediaShow sortedEpisodes];
+    NSUInteger episodeCount = episodes.count;
+    for (NSUInteger x = 0; x < episodeCount; x++)
+        nameRange = [self _searchShowEpisode:episodes[x] forString:searchString];
+
+    return nameRange;
+}
+
+- (NSRange)_searchLabel:(MLLabel *)mediaLabel forString:(NSString *)searchString
+{
+    /* basic search first, then try more complex things */
+    NSRange nameRange = [[mediaLabel name] rangeOfString:searchString options:NSCaseInsensitiveSearch];
+
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    /* user didn't search for our label name, let's do a deeper search */
+    NSArray *files = [mediaLabel sortedFolderItems];
+    NSUInteger fileCount = files.count;
+    for (NSUInteger x = 0; x < fileCount; x++) {
+        nameRange = [self _searchFile:files[x] forString:searchString];
+        if (nameRange.location != NSNotFound)
+            break;
+    }
+    return nameRange;
+}
+
+- (NSRange)_searchFile:(MLFile *)mediaFile forString:(NSString *)searchString
+{
+    /* basic search first, then try more complex things */
+    NSRange nameRange = [[mediaFile title] rangeOfString:searchString options:NSCaseInsensitiveSearch];
+    if (nameRange.location != NSNotFound)
+        return nameRange;
+
+    NSMutableArray *stringsToSearch = [[NSMutableArray alloc] initWithObjects:[mediaFile title], nil];
+    if ([mediaFile artist])
+        [stringsToSearch addObject:[mediaFile artist]];
+    if ([mediaFile releaseYear])
+        [stringsToSearch addObject:[mediaFile releaseYear]];
+
+    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
+    NSUInteger substringCount = substrings.count;
+    NSUInteger searchStringCount = stringsToSearch.count;
+
+    for (NSUInteger x = 0; x < substringCount; x++) {
+        for (NSUInteger y = 0; y < searchStringCount; y++) {
+            nameRange = [stringsToSearch[y] rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
+            if (nameRange.location != NSNotFound)
+                break;
+        }
+        if (nameRange.location != NSNotFound)
+            break;
+    }
+
+    return nameRange;
+}
+@end

+ 10 - 224
Sources/VLCLibraryViewController.m

@@ -24,6 +24,7 @@
 #import "VLCFirstStepsViewController.h"
 #import "VLCFolderCollectionViewFlowLayout.h"
 #import "VLCKeychainCoordinator.h"
+#import "VLCLibrarySearchDisplayDataSource.h"
 #import "VLCMovieViewController.h"
 #import "VLCNavigationController.h"
 #import "VLCPlaylistCollectionViewCell.h"
@@ -63,7 +64,7 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
     BOOL _deleteFromTableView;
     UILongPressGestureRecognizer *_longPressGestureRecognizer;
 
-    NSMutableArray *_searchData;
+    VLCLibrarySearchDisplayDataSource *_searchDataSource;
     UISearchBar *_searchBar;
     UISearchDisplayController *_searchDisplayController;
 
@@ -101,6 +102,7 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
     [self setViewFromDeviceOrientation];
     [self updateViewsForCurrentDisplayMode];
     _libraryMode = VLCLibraryModeAllFiles;
+    _searchDataSource = [VLCLibrarySearchDisplayDataSource new];
 
     self.emptyLibraryView = [[[NSBundle mainBundle] loadNibNamed:@"VLCEmptyLibraryView" owner:self options:nil] lastObject];
     _emptyLibraryView.emptyLibraryLongDescriptionLabel.lineBreakMode = NSLineBreakByWordWrapping;
@@ -133,7 +135,6 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
             _tableView.tableHeaderView = _searchBar;
             _tableView.tableFooterView = [UIView new];
             self.navigationController.scrollNavigationBar.scrollView = self.tableView;
-
         }
         _tableView.frame = contentView.bounds;
         [contentView addSubview:_tableView];
@@ -237,18 +238,16 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
     _searchBar.opaque = navBar.opaque;
     _searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:_searchBar contentsController:self];
     _searchDisplayController.delegate = self;
-    _searchDisplayController.searchResultsDataSource = self;
+    _searchDisplayController.searchResultsDataSource = _searchDataSource;
     _searchDisplayController.searchResultsDelegate = self;
     _searchDisplayController.searchResultsTableView.separatorStyle = UITableViewCellSeparatorStyleNone;
     _searchDisplayController.searchResultsTableView.indicatorStyle = UIScrollViewIndicatorStyleWhite;
+    [_searchDisplayController.searchResultsTableView registerNib:[_searchDataSource nibclass] forCellReuseIdentifier:[_searchDataSource cellIdentifier]];
     _searchBar.delegate = self;
 
     [self setSearchBar:YES resetContent:YES];
     self.edgesForExtendedLayout = UIRectEdgeNone;
 
-    @synchronized (self) {
-        _searchData = [[NSMutableArray alloc] init];
-    }
 }
 
 - (void)viewWillAppear:(BOOL)animated
@@ -708,9 +707,6 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
 
 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
 {
-    if (tableView == self.searchDisplayController.searchResultsTableView)
-        return _searchData.count;
-
     return _foundMedia.count;
 }
 
@@ -731,16 +727,9 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
 
     NSInteger row = indexPath.row;
 
-    if (tableView == self.searchDisplayController.searchResultsTableView) {
-        @synchronized (_searchData) {
-            if (row < _searchData.count)
-                cell.mediaObject = _searchData[row];
-        }
-    } else {
-        @synchronized (_foundMedia) {
-            if (row < _foundMedia.count)
-                cell.mediaObject = _foundMedia[row];
-        }
+    @synchronized (_foundMedia) {
+        if (row < _foundMedia.count)
+            cell.mediaObject = _foundMedia[row];
     }
 
     return cell;
@@ -826,10 +815,7 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
 
     NSUInteger row = indexPath.row;
     if (tableView == self.searchDisplayController.searchResultsTableView) {
-        @synchronized (_searchData) {
-            if (row < _searchData.count)
-                selectedObject = _searchData[row];
-        }
+        selectedObject = [_searchDataSource objectAtIndex:row];
     } else {
         @synchronized (_foundMedia) {
             if (row < _foundMedia.count)
@@ -1712,212 +1698,12 @@ static NSString *kUsingTableViewToShowData = @"UsingTableViewToShowData";
 
 - (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
 {
-    @synchronized (_searchData) {
-        [_searchData removeAllObjects];
-    }
-    NSManagedObject *item;
-    NSRange nameRange;
-
     @synchronized(_foundMedia) {
-        NSInteger listCount = _foundMedia.count;
-        for (int i = 0; i < listCount; i++) {
-            item = _foundMedia[i];
-
-            if ([item isKindOfClass:[MLAlbum class]]) {
-                nameRange = [self _searchAlbum:(MLAlbum *)item forString:searchString];
-            } else if ([item isKindOfClass:[MLAlbumTrack class]]) {
-                nameRange = [self _searchAlbumTrack:(MLAlbumTrack *)item forString:searchString];
-            } else if ([item isKindOfClass:[MLShowEpisode class]]) {
-                nameRange = [self _searchShowEpisode:(MLShowEpisode *)item forString:searchString];
-            } else if ([item isKindOfClass:[MLShow class]]) {
-                nameRange = [self _searchShow:(MLShow *)item forString:searchString];
-            } else if ([item isKindOfClass:[MLLabel class]])
-                nameRange = [self _searchLabel:(MLLabel *)item forString:searchString];
-            else // simple file
-                nameRange = [self _searchFile:(MLFile*)item forString:searchString];
-
-            @synchronized (_searchData) {
-                if (nameRange.location != NSNotFound)
-                    [_searchData addObject:item];
-            }
-        }
+        [_searchDataSource shouldReloadTableForSearchString:searchString searchableFiles:_foundMedia];
     }
-
     return YES;
 }
 
-- (NSRange)_searchAlbumTrack:(MLAlbumTrack *)albumTrack forString:(NSString *)searchString
-{
-    NSString *trackTitle = albumTrack.title;
-    NSRange nameRange = [trackTitle rangeOfString:searchString options:NSCaseInsensitiveSearch];
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    NSMutableArray *stringsToSearch = [[NSMutableArray alloc] initWithObjects:trackTitle, nil];
-    if ([albumTrack artist])
-        [stringsToSearch addObject:[albumTrack artist]];
-    if ([albumTrack genre])
-        [stringsToSearch addObject:[albumTrack genre]];
-
-    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
-    NSUInteger substringCount = substrings.count;
-    NSUInteger searchStringCount = stringsToSearch.count;
-
-    for (NSUInteger x = 0; x < substringCount; x++) {
-        for (NSUInteger y = 0; y < searchStringCount; y++) {
-            nameRange = [stringsToSearch[y] rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
-            if (nameRange.location != NSNotFound)
-                break;
-        }
-        if (nameRange.location != NSNotFound)
-            break;
-    }
-    return nameRange;
-}
-
-- (NSRange)_searchAlbum:(MLAlbum *)album forString:(NSString *)searchString
-{
-    NSString *albumName = [album name];
-    NSRange nameRange = [albumName rangeOfString:searchString options:NSCaseInsensitiveSearch];
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    if ([album releaseYear]) {
-        nameRange = [[album releaseYear] rangeOfString:searchString options:NSCaseInsensitiveSearch];
-        if (nameRange.location != NSNotFound)
-            return nameRange;
-    }
-
-    /* split search string into substrings and try again */
-    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
-    NSUInteger substringCount = substrings.count;
-    if (substringCount > 1) {
-        for (NSUInteger x = 0; x < substringCount; x++) {
-            nameRange = [searchString rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
-            if (nameRange.location != NSNotFound)
-                break;
-        }
-    }
-
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    /* search our tracks if we can't find what the user is looking for */
-    NSArray *tracks = [album sortedTracks];
-    NSUInteger trackCount = tracks.count;
-    for (NSUInteger x = 0; x < trackCount; x++) {
-        nameRange = [self _searchAlbumTrack:tracks[x] forString:searchString];
-        if (nameRange.location != NSNotFound)
-            break;
-    }
-    return nameRange;
-}
-
-- (NSRange)_searchShowEpisode:(MLShowEpisode *)episode forString:(NSString *)searchString
-{
-    /* basic search first, then try more complex things */
-    NSString *episodeName = [episode name];
-    NSRange nameRange;
-
-    if (episodeName) {
-        nameRange = [episodeName rangeOfString:searchString options:NSCaseInsensitiveSearch];
-        if (nameRange.location != NSNotFound)
-            return nameRange;
-    }
-
-    /* split search string into substrings and try again */
-    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
-    NSUInteger substringCount = substrings.count;
-    if (substringCount > 1) {
-        for (NSUInteger x = 0; x < substringCount; x++) {
-            nameRange = [searchString rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
-            if (nameRange.location != NSNotFound)
-                break;
-        }
-    }
-
-    return nameRange;
-}
-
-- (NSRange)_searchShow:(MLShow *)mediaShow forString:(NSString *)searchString
-{
-    /* basic search first, then try more complex things */
-    NSRange nameRange = [[mediaShow name] rangeOfString:searchString options:NSCaseInsensitiveSearch];
-
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    /* split search string into substrings and try again */
-    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
-    NSUInteger substringCount = substrings.count;
-    if (substringCount > 1) {
-        for (NSUInteger x = 0; x < substringCount; x++) {
-            nameRange = [searchString rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
-            if (nameRange.location != NSNotFound)
-                break;
-        }
-    }
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    /* user didn't search for our show name, let's do a deeper search on the episodes */
-    NSArray *episodes = [mediaShow sortedEpisodes];
-    NSUInteger episodeCount = episodes.count;
-    for (NSUInteger x = 0; x < episodeCount; x++)
-        nameRange = [self _searchShowEpisode:episodes[x] forString:searchString];
-
-    return nameRange;
-}
-
-- (NSRange)_searchLabel:(MLLabel *)mediaLabel forString:(NSString *)searchString
-{
-    /* basic search first, then try more complex things */
-    NSRange nameRange = [[mediaLabel name] rangeOfString:searchString options:NSCaseInsensitiveSearch];
-
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    /* user didn't search for our label name, let's do a deeper search */
-    NSArray *files = [mediaLabel sortedFolderItems];
-    NSUInteger fileCount = files.count;
-    for (NSUInteger x = 0; x < fileCount; x++) {
-        nameRange = [self _searchFile:files[x] forString:searchString];
-        if (nameRange.location != NSNotFound)
-            break;
-    }
-    return nameRange;
-}
-
-- (NSRange)_searchFile:(MLFile *)mediaFile forString:(NSString *)searchString
-{
-    /* basic search first, then try more complex things */
-    NSRange nameRange = [[mediaFile title] rangeOfString:searchString options:NSCaseInsensitiveSearch];
-    if (nameRange.location != NSNotFound)
-        return nameRange;
-
-    NSMutableArray *stringsToSearch = [[NSMutableArray alloc] initWithObjects:[mediaFile title], nil];
-    if ([mediaFile artist])
-        [stringsToSearch addObject:[mediaFile artist]];
-    if ([mediaFile releaseYear])
-        [stringsToSearch addObject:[mediaFile releaseYear]];
-
-    NSArray *substrings = [searchString componentsSeparatedByString:@" "];
-    NSUInteger substringCount = substrings.count;
-    NSUInteger searchStringCount = stringsToSearch.count;
-
-    for (NSUInteger x = 0; x < substringCount; x++) {
-        for (NSUInteger y = 0; y < searchStringCount; y++) {
-            nameRange = [stringsToSearch[y] rangeOfString:substrings[x] options:NSCaseInsensitiveSearch];
-            if (nameRange.location != NSNotFound)
-                break;
-        }
-        if (nameRange.location != NSNotFound)
-            break;
-    }
-
-    return nameRange;
-}
-
 #pragma mark - handoff
 
 - (void)restoreUserActivityState:(NSUserActivity *)activity

+ 6 - 0
VLC.xcodeproj/project.pbxproj

@@ -47,6 +47,7 @@
 		41B93C081A53853B00102E8B /* VLCCloudServiceCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41B93C071A53853B00102E8B /* VLCCloudServiceCell.xib */; };
 		41CD695C1A29D72600E60BCE /* VLCBoxController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41CD69591A29D72600E60BCE /* VLCBoxController.m */; };
 		41CD695D1A29D72600E60BCE /* VLCBoxTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 41CD695B1A29D72600E60BCE /* VLCBoxTableViewController.m */; };
+		41F5C0781F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.m in Sources */ = {isa = PBXBuildFile; fileRef = 41F5C0771F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.m */; };
 		6A804FA9706D38FB40A4136A /* libPods-VLC-watchOS-Extension.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F82CE64560C0AD3059DAAFC /* libPods-VLC-watchOS-Extension.a */; };
 		6B4E33D11BF2A39400A35255 /* playerControl.css in Resources */ = {isa = PBXBuildFile; fileRef = 6B4E33CF1BF2A39400A35255 /* playerControl.css */; };
 		6B4E33D21BF2A39400A35255 /* playerControl.js in Resources */ = {isa = PBXBuildFile; fileRef = 6B4E33D01BF2A39400A35255 /* playerControl.js */; };
@@ -1158,6 +1159,8 @@
 		41CD69591A29D72600E60BCE /* VLCBoxController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCBoxController.m; path = Sources/VLCBoxController.m; sourceTree = SOURCE_ROOT; };
 		41CD695A1A29D72600E60BCE /* VLCBoxTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCBoxTableViewController.h; path = Sources/VLCBoxTableViewController.h; sourceTree = SOURCE_ROOT; };
 		41CD695B1A29D72600E60BCE /* VLCBoxTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCBoxTableViewController.m; path = Sources/VLCBoxTableViewController.m; sourceTree = SOURCE_ROOT; };
+		41F5C0761F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = VLCLibrarySearchDisplayDataSource.h; path = Sources/VLCLibrarySearchDisplayDataSource.h; sourceTree = SOURCE_ROOT; };
+		41F5C0771F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = VLCLibrarySearchDisplayDataSource.m; path = Sources/VLCLibrarySearchDisplayDataSource.m; sourceTree = SOURCE_ROOT; };
 		4EB2A836EBC6DE6E89855975 /* Pods-VLC-watchOS-Extension.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-watchOS-Extension.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-watchOS-Extension/Pods-VLC-watchOS-Extension.debug.xcconfig"; sourceTree = "<group>"; };
 		5B343E4F4D971F5A169EB864 /* Pods-VLC-iOS.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-iOS.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-iOS/Pods-VLC-iOS.distribution.xcconfig"; sourceTree = "<group>"; };
 		633AEC92459BCABEC8671A34 /* Pods-VLC-tvOS-Debug.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-tvOS-Debug.debug.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-tvOS-Debug/Pods-VLC-tvOS-Debug.debug.xcconfig"; sourceTree = "<group>"; };
@@ -2262,6 +2265,8 @@
 				7D378498183A98D1009EE944 /* VLCLibraryViewController.m */,
 				8F91EC77195CEC7900F5BCBA /* VLCOpenInActivity.h */,
 				8F91EC78195CEC7900F5BCBA /* VLCOpenInActivity.m */,
+				41F5C0761F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.h */,
+				41F5C0771F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.m */,
 			);
 			name = "Everything Playlist";
 			sourceTree = "<group>";
@@ -4642,6 +4647,7 @@
 				41B93C051A53835300102E8B /* VLCCloudServiceCell.m in Sources */,
 				7D4625881A5614A1001A80B4 /* VLCEqualizerView.m in Sources */,
 				7DF9352F1958AB0600E60FD4 /* UIColor+Presets.m in Sources */,
+				41F5C0781F41ED55005EB9CB /* VLCLibrarySearchDisplayDataSource.m in Sources */,
 				7D50903218F41C7900180139 /* VLCAlertView.m in Sources */,
 				7DBBF182183AB3B80009A339 /* VLCAppDelegate.m in Sources */,
 				7D3784C0183A9938009EE944 /* VLCLinearProgressIndicator.m in Sources */,