From bb1a55aa8012f56a39718c5da3f04849327c0271 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <felix@feepk.net> Date: Fri, 31 May 2019 18:41:00 +0200 Subject: [PATCH] macosx/playlist controller: expose sorting --- .../macosx/playlist/VLCPlaylistController.h | 24 +++++++++++++++++++ .../macosx/playlist/VLCPlaylistController.m | 16 +++++++++++++ 2 files changed, 40 insertions(+) diff --git a/modules/gui/macosx/playlist/VLCPlaylistController.h b/modules/gui/macosx/playlist/VLCPlaylistController.h index eba43dd1149e..4d7e6c270496 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 a65c044e8330..f09570df3237 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]; -- GitLab