diff --git a/modules/gui/macosx/playlist/VLCPlaylistController.h b/modules/gui/macosx/playlist/VLCPlaylistController.h index eba43dd1149ec5e41d806bba199c7006099a02a2..4d7e6c270496cbb814683eeb1549c1208ac9abac 100644 --- a/modules/gui/macosx/playlist/VLCPlaylistController.h +++ b/modules/gui/macosx/playlist/VLCPlaylistController.h @@ -142,6 +142,30 @@ extern NSString *VLCPlaylistItemsRemoved; */ - (void)clearPlaylist; +/** + * Sort the entire playlist listen based on: + * @param sortKey the key used for sorting + * @param sortOrder sort ascending or descending.. + * @return Returns VLC_SUCCESS on success. + */ +- (int)sortByKey:(enum vlc_playlist_sort_key)sortKey andOrder:(enum vlc_playlist_sort_order)sortOrder; + +/** + * Initially, the playlist is unsorted until the user decides to do so + * Until then, the unsorted state is retained. + */ +@property (readonly) BOOL unsorted; + +/** + * The last key used for sorting + */ +@property (readonly) enum vlc_playlist_sort_key lastSortKey; + +/** + * The last order used for sorting + */ +@property (readonly) enum vlc_playlist_sort_order lastSortOrder; + /** * Start the playlist * @return Returns VLC_SUCCESS on success. diff --git a/modules/gui/macosx/playlist/VLCPlaylistController.m b/modules/gui/macosx/playlist/VLCPlaylistController.m index a65c044e83304adb01beccaa87e43811951e9088..f09570df32373131cdefe5dbd37873bdfeb5ddd4 100644 --- a/modules/gui/macosx/playlist/VLCPlaylistController.m +++ b/modules/gui/macosx/playlist/VLCPlaylistController.m @@ -210,6 +210,7 @@ static const struct vlc_playlist_callbacks playlist_callbacks = { /* set initial values, further updates through callbacks */ vlc_playlist_Lock(_p_playlist); + _unsorted = YES; _playbackOrder = vlc_playlist_GetPlaybackOrder(_p_playlist); _playbackRepeat = vlc_playlist_GetPlaybackRepeat(_p_playlist); _playlistListenerID = vlc_playlist_AddListener(_p_playlist, @@ -424,6 +425,21 @@ static const struct vlc_playlist_callbacks playlist_callbacks = { vlc_playlist_Unlock(_p_playlist); } +- (int)sortByKey:(enum vlc_playlist_sort_key)sortKey andOrder:(enum vlc_playlist_sort_order)sortOrder +{ + struct vlc_playlist_sort_criterion sortCriterion = { sortKey, sortOrder }; + int returnValue = VLC_SUCCESS; + vlc_playlist_Lock(_p_playlist); + returnValue = vlc_playlist_Sort(_p_playlist, &sortCriterion, 1); + vlc_playlist_Unlock(_p_playlist); + if (returnValue == VLC_SUCCESS) { + _lastSortKey = sortKey; + _lastSortOrder = sortOrder; + _unsorted = NO; + } + return returnValue; +} + - (int)startPlaylist { NSInteger selectedIndex = [_playlistDataSource.tableView selectedRow];