[vlc-commits] [Git][videolan/vlc][master] macosx: use vlc_ml_list_favorite_media for all-favorites list

Steve Lhomme (@robUx4) gitlab at videolan.org
Thu Apr 16 06:02:13 UTC 2026



Steve Lhomme pushed to branch master at VideoLAN / VLC


Commits:
bd0df9c8 by Felix Paul Kühne at 2026-04-16T06:36:57+02:00
macosx: use vlc_ml_list_favorite_media for all-favorites list

Use the media library API to fetch all favorites in a single sorted
query instead of merging two separate lists and re-sorting in the UI.
Removes the sortMediaItems method which performed database lookups
inside the sort comparator.

- - - - -


1 changed file:

- modules/gui/macosx/library/VLCLibraryModel.m


Changes:

=====================================
modules/gui/macosx/library/VLCLibraryModel.m
=====================================
@@ -965,10 +965,13 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event)
     switch(parentType) {
     case VLCMediaLibraryParentGroupTypeAllFavorites:
     {
-        NSMutableArray<VLCMediaLibraryMediaItem *> *allFavorites = [NSMutableArray array];
-        [allFavorites addObjectsFromArray:self.listOfFavoriteVideoMedia];
-        [allFavorites addObjectsFromArray:self.listOfFavoriteAudioMedia];
-        return [self sortMediaItems:allFavorites];
+        const vlc_ml_query_params_t queryParams = [self queryParams];
+        vlc_ml_media_list_t * const p_media_list = vlc_ml_list_favorite_media(_p_mediaLibrary, &queryParams);
+        NSArray * const mediaArray = [NSArray arrayFromVlcMediaList:p_media_list];
+        if (p_media_list) {
+            vlc_ml_media_list_release(p_media_list);
+        }
+        return mediaArray ?: @[];
     }
     case VLCMediaLibraryParentGroupTypeArtist:
         return self.listOfArtists;
@@ -1000,74 +1003,6 @@ static void libraryCallback(void *p_data, const vlc_ml_event_t *p_event)
     return mediaItems.copy;
 }
 
-- (NSArray<VLCMediaLibraryMediaItem *> *)sortMediaItems:(NSArray<VLCMediaLibraryMediaItem *> *)items
-{
-    if (items.count == 0) {
-        return items;
-    }
-
-    const BOOL descending = _sortDescending;
-
-    return [items sortedArrayUsingComparator:^NSComparisonResult(VLCMediaLibraryMediaItem *item1, VLCMediaLibraryMediaItem *item2) {
-        NSComparisonResult result = NSOrderedSame;
-
-        switch (self->_sortCriteria) {
-            case VLC_ML_SORTING_DEFAULT:
-            case VLC_ML_SORTING_ALPHA:
-                result = [item1.title localizedCaseInsensitiveCompare:item2.title];
-                break;
-            case VLC_ML_SORTING_DURATION:
-                result = [@(item1.duration) compare:@(item2.duration)];
-                break;
-            case VLC_ML_SORTING_INSERTIONDATE:
-            case VLC_ML_SORTING_LASTMODIFICATIONDATE:
-                result = NSOrderedSame;
-                break;
-            case VLC_ML_SORTING_RELEASEDATE:
-                result = [@(item1.year) compare:@(item2.year)];
-                break;
-            case VLC_ML_SORTING_FILESIZE:
-                result = NSOrderedSame;
-                break;
-            case VLC_ML_SORTING_ARTIST:
-            {
-                VLCMediaLibraryAlbum *album1 = [VLCMediaLibraryAlbum albumWithID:item1.albumID];
-                VLCMediaLibraryAlbum *album2 = [VLCMediaLibraryAlbum albumWithID:item2.albumID];
-                if (album1 && album2) {
-                    result = [album1.artistName localizedCaseInsensitiveCompare:album2.artistName];
-                } else {
-                    result = NSOrderedSame;
-                }
-                break;
-            }
-            case VLC_ML_SORTING_PLAYCOUNT:
-                result = [@(item1.playCount) compare:@(item2.playCount)];
-                break;
-            case VLC_ML_SORTING_ALBUM:
-            {
-                VLCMediaLibraryAlbum *album1 = [VLCMediaLibraryAlbum albumWithID:item1.albumID];
-                VLCMediaLibraryAlbum *album2 = [VLCMediaLibraryAlbum albumWithID:item2.albumID];
-                if (album1 && album2) {
-                    result = [album1.title localizedCaseInsensitiveCompare:album2.title];
-                } else {
-                    result = NSOrderedSame;
-                }
-                break;
-            }
-            case VLC_ML_SORTING_FILENAME:
-                result = [item1.title localizedCaseInsensitiveCompare:item2.title];
-                break;
-            case VLC_ML_SORTING_TRACKNUMBER:
-                result = [@(item1.trackNumber) compare:@(item2.trackNumber)];
-                break;
-            default:
-                result = NSOrderedSame;
-                break;
-        }
-
-        return descending ? -result : result;
-    }];
-}
 
 - (void)sortByCriteria:(enum vlc_ml_sorting_criteria_t)sortCriteria andDescending:(bool)descending
 {



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/bd0df9c8b455797e0722df820ddeb689242e6263

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/bd0df9c8b455797e0722df820ddeb689242e6263
You're receiving this email because of your account on code.videolan.org.




More information about the vlc-commits mailing list