From 9820571a94bda7eb34be36261322bcfee8d81b85 Mon Sep 17 00:00:00 2001 From: Christopher Snowhill Date: Fri, 17 Jun 2022 17:02:24 -0700 Subject: [PATCH] [Shuffle Function] Rewrite query for Core Data Rewrite the album filter function to apply the filter predicate against Core Data directly, which also requires filtering out deLeted entries so they don't end up in the results, and also requires sorting the results. Signed-off-by: Christopher Snowhill --- Playlist/PlaylistController.m | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/Playlist/PlaylistController.m b/Playlist/PlaylistController.m index 1dad1d8e7..38fe1d5a4 100644 --- a/Playlist/PlaylistController.m +++ b/Playlist/PlaylistController.m @@ -1108,12 +1108,28 @@ static inline void dispatch_sync_reentrant(dispatch_queue_t queue, dispatch_bloc } - (NSArray *)filterPlaylistOnAlbum:(NSString *)album { - NSPredicate *predicate; + NSPredicate *deletedPredicate = [NSPredicate predicateWithFormat:@"deLeted == NO || deLeted == nil"]; + + NSPredicate *searchPredicate; if([album length] > 0) - predicate = [NSPredicate predicateWithFormat:@"album like %@", album]; + searchPredicate = [NSPredicate predicateWithFormat:@"album like %@", album]; else - predicate = [NSPredicate predicateWithFormat:@"album == nil || album like %@", @""]; - return [[self arrangedObjects] filteredArrayUsingPredicate:predicate]; + searchPredicate = [NSPredicate predicateWithFormat:@"album == nil || album like %@", @""]; + + NSCompoundPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:@[deletedPredicate, searchPredicate]]; + + NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"PlaylistEntry"]; + request.predicate = predicate; + + NSError *error = nil; + NSArray *results = [self.persistentContainer.viewContext executeFetchRequest:request error:&error]; + + if(results && [results count] > 0) { + NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"index" ascending:YES]; + results = [results sortedArrayUsingDescriptors:@[sortDescriptor]]; + } + + return results; } - (PlaylistEntry *)getPrevEntry:(PlaylistEntry *)pe {