vlc | branch: master | Felix Paul Kühne <[email protected]> | Fri Aug 30 16:57:09 2019 +0200| [c62561d1556599fa2a65660546a02e966258c469] | committer: Felix Paul Kühne
macosx/audio library: add double click on collection for playback and refactor > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=c62561d1556599fa2a65660546a02e966258c469 --- .../gui/macosx/library/VLCLibraryAudioDataSource.m | 56 +++++++++++++++++++--- modules/gui/macosx/library/VLCLibraryController.h | 1 + modules/gui/macosx/library/VLCLibraryController.m | 21 ++++++++ 3 files changed, 72 insertions(+), 6 deletions(-) diff --git a/modules/gui/macosx/library/VLCLibraryAudioDataSource.m b/modules/gui/macosx/library/VLCLibraryAudioDataSource.m index 8071e77826..6512f27685 100644 --- a/modules/gui/macosx/library/VLCLibraryAudioDataSource.m +++ b/modules/gui/macosx/library/VLCLibraryAudioDataSource.m @@ -71,6 +71,8 @@ static NSString *VLCAudioLibraryCellIdentifier = @"VLCAudioLibraryCellIdentifier _groupSelectionTableView.target = self; _groupSelectionTableView.doubleAction = @selector(groubSelectionDoubleClickAction:); + _collectionSelectionTableView.target = self; + _collectionSelectionTableView.doubleAction = @selector(collectionSelectionDoubleClickAction:); [self reloadAppearance]; } @@ -297,13 +299,55 @@ static NSString *VLCAudioLibraryCellIdentifier = @"VLCAudioLibraryCellIdentifier VLCLibraryController *libraryController = [[VLCMain sharedInstance] libraryController]; NSArray *tracks = [listOfAlbums[clickedRow] tracksAsMediaItems]; - NSUInteger trackCount = tracks.count; - BOOL playImmediately = YES; - for (NSUInteger x = 0; x < trackCount; x++) { - [libraryController appendItemToPlaylist:tracks[x] playImmediately:playImmediately]; - if (playImmediately) { - playImmediately = NO; + [libraryController appendItemsToPlaylist:tracks playFirstItemImmediately:YES]; +} + +- (void)collectionSelectionDoubleClickAction:(id)sender +{ + NSArray *listOfAlbums; + + switch (_currentParentType) { + case VLC_ML_PARENT_ARTIST: + { + VLCMediaLibraryArtist *artist = _displayedCollection[self.collectionSelectionTableView.selectedRow]; + listOfAlbums = [_libraryModel listAlbumsOfParentType:VLC_ML_PARENT_ARTIST forID:artist.artistID]; + break; + } + case VLC_ML_PARENT_ALBUM: + { + VLCMediaLibraryAlbum *album = _displayedCollection[self.collectionSelectionTableView.selectedRow]; + listOfAlbums = @[album]; + break; + } + case VLC_ML_PARENT_UNKNOWN: + { + // FIXME: we have nothing to show here + listOfAlbums = nil; + break; } + case VLC_ML_PARENT_GENRE: + { + VLCMediaLibraryGenre *genre = _displayedCollection[self.collectionSelectionTableView.selectedRow]; + listOfAlbums = [_libraryModel listAlbumsOfParentType:VLC_ML_PARENT_GENRE forID:genre.genreID]; + break; + } + default: + NSAssert(1, @"reached the unreachable"); + break; + } + + if (!listOfAlbums) { + return; + } + NSUInteger albumCount = listOfAlbums.count; + if (albumCount == 0) { + return; + } + + VLCLibraryController *libraryController = [[VLCMain sharedInstance] libraryController]; + for (NSUInteger x = 0; x < albumCount; x++) { + NSArray *tracks = [listOfAlbums[x] tracksAsMediaItems]; + [libraryController appendItemsToPlaylist:tracks playFirstItemImmediately:YES]; } } diff --git a/modules/gui/macosx/library/VLCLibraryController.h b/modules/gui/macosx/library/VLCLibraryController.h index 271112cad1..95a19981f1 100644 --- a/modules/gui/macosx/library/VLCLibraryController.h +++ b/modules/gui/macosx/library/VLCLibraryController.h @@ -34,6 +34,7 @@ NS_ASSUME_NONNULL_BEGIN @property (readonly, nullable) VLCLibraryModel *libraryModel; - (int)appendItemToPlaylist:(VLCMediaLibraryMediaItem *)mediaItem playImmediately:(BOOL)playImmediately; +- (int)appendItemsToPlaylist:(NSArray <VLCMediaLibraryMediaItem *> *)mediaItemArray playFirstItemImmediately:(BOOL)playFirstItemImmediately; - (void)showItemInFinder:(VLCMediaLibraryMediaItem *)mediaItem; - (int)attemptToGenerateThumbnailForMediaItem:(VLCMediaLibraryMediaItem *)mediaItem; diff --git a/modules/gui/macosx/library/VLCLibraryController.m b/modules/gui/macosx/library/VLCLibraryController.m index 556e1c4de6..da62097af3 100644 --- a/modules/gui/macosx/library/VLCLibraryController.m +++ b/modules/gui/macosx/library/VLCLibraryController.m @@ -130,6 +130,27 @@ float kVLCDefaultThumbnailPosition = .15; return ret; } +- (int)appendItemsToPlaylist:(NSArray <VLCMediaLibraryMediaItem *> *)mediaItemArray playFirstItemImmediately:(BOOL)playFirstItemImmediately +{ + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } + + NSUInteger itemCount = [mediaItemArray count]; + int ret = VLC_SUCCESS; + for (NSUInteger x = 0; x < itemCount; x++) { + if (unlikely(x == 0 && playFirstItemImmediately)) { + ret = [self appendItemToPlaylist:mediaItemArray[x] playImmediately:YES]; + } else { + ret = [self appendItemToPlaylist:mediaItemArray[x] playImmediately:NO]; + } + if (unlikely(ret != VLC_SUCCESS)) { + break; + } + } + return ret; +} + - (void)showItemInFinder:(VLCMediaLibraryMediaItem *)mediaItem; { if (mediaItem == nil) { _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
