From a1006afe5e8e0b0dc9064d221bdc5ef971319857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <felix@feepk.net> Date: Sun, 21 Apr 2019 18:45:55 +0200 Subject: [PATCH] macosx/library data types: expose show episodes, movies and album tracks --- .../gui/macosx/library/VLCLibraryDataTypes.h | 43 ++++++- .../gui/macosx/library/VLCLibraryDataTypes.m | 116 ++++++++++++++---- 2 files changed, 127 insertions(+), 32 deletions(-) diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.h b/modules/gui/macosx/library/VLCLibraryDataTypes.h index cb91ca7b2b27..e2a9ac77efa5 100644 --- a/modules/gui/macosx/library/VLCLibraryDataTypes.h +++ b/modules/gui/macosx/library/VLCLibraryDataTypes.h @@ -27,7 +27,7 @@ NS_ASSUME_NONNULL_BEGIN @interface VLCMediaLibraryFile : NSObject -- (instancetype)initWithFile:(struct vlc_ml_file_t *)file; +- (instancetype)initWithFile:(struct vlc_ml_file_t *)p_file; @property (readonly) NSString *MRL; @property (readonly) vlc_ml_file_type_t fileType; @@ -39,7 +39,7 @@ NS_ASSUME_NONNULL_BEGIN @interface VLCMediaLibraryTrack : NSObject -- (instancetype)initWithTrack:(struct vlc_ml_media_track_t *)track; +- (instancetype)initWithTrack:(struct vlc_ml_media_track_t *)p_track; @property (readonly) NSString *codec; @property (readonly) NSString *language; @@ -59,6 +59,39 @@ NS_ASSUME_NONNULL_BEGIN @end +@interface VLCMediaLibraryMovie : NSObject + +- (instancetype)initWithMovie:(struct vlc_ml_movie_t *)p_movie; + +@property (readonly) NSString *summary; +@property (readonly) NSString *imdbID; + +@end + +@interface VLCMediaLibraryShowEpisode : NSObject + +- (instancetype)initWithShowEpisode:(struct vlc_ml_show_episode_t *)p_showEpisode; + +@property (readonly) NSString *summary; +@property (readonly) NSString *tvdbID; +@property (readonly) uint32_t episodeNumber; +@property (readonly) uint32_t seasonNumber; + +@end + +@interface VLCMediaLibraryAlbumTrack : NSObject + +- (instancetype)initWithAlbumTrack:(struct vlc_ml_album_track_t *)p_albumTrack; + +@property (readonly) int64_t artistID; +@property (readonly) int64_t albumID; +@property (readonly) int64_t genreID; + +@property (readonly) int trackNumber; +@property (readonly) int discNumber; + +@end + @interface VLCMediaLibraryMediaItem : NSObject - (instancetype)initWithMediaItem:(struct vlc_ml_media_t *)mediaItem; @@ -81,9 +114,9 @@ NS_ASSUME_NONNULL_BEGIN @property (readonly) BOOL artworkGenerated; @property (readonly) BOOL favorited; -@property (readonly) vlc_ml_show_episode_t showEpisode; -@property (readonly) vlc_ml_movie_t movie; -@property (readonly) vlc_ml_album_track_t albumTrack; +@property (readonly, nullable) VLCMediaLibraryShowEpisode *showEpisode; +@property (readonly, nullable) VLCMediaLibraryMovie *movie; +@property (readonly, nullable) VLCMediaLibraryAlbumTrack *albumTrack; @end diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.m b/modules/gui/macosx/library/VLCLibraryDataTypes.m index b3cf00fcbfa3..a42a2e63063b 100644 --- a/modules/gui/macosx/library/VLCLibraryDataTypes.m +++ b/modules/gui/macosx/library/VLCLibraryDataTypes.m @@ -26,15 +26,15 @@ @implementation VLCMediaLibraryFile -- (instancetype)initWithFile:(struct vlc_ml_file_t *)file +- (instancetype)initWithFile:(struct vlc_ml_file_t *)p_file { self = [super init]; - if (self && file != NULL) { - _MRL = toNSStr(file->psz_mrl); - _fileType = file->i_type; - _external = file->b_external; - _removable = file->b_removable; - _present = file->b_present; + if (self && p_file != NULL) { + _MRL = toNSStr(p_file->psz_mrl); + _fileType = p_file->i_type; + _external = p_file->b_external; + _removable = p_file->b_removable; + _present = p_file->b_present; } return self; } @@ -48,25 +48,25 @@ @implementation VLCMediaLibraryTrack -- (instancetype)initWithTrack:(struct vlc_ml_media_track_t *)track +- (instancetype)initWithTrack:(struct vlc_ml_media_track_t *)p_track { self = [super init]; - if (self && track != NULL) { - _codec = toNSStr(track->psz_codec); - _language = toNSStr(track->psz_language); - _trackDescription = toNSStr(track->psz_description); - _trackType = track->i_type; - _bitrate = track->i_bitrate; - - _numberOfAudioChannels = track->a.i_nbChannels; - _audioSampleRate = track->a.i_sampleRate; - - _videoHeight = track->v.i_height; - _videoWidth = track->v.i_width; - _sourceAspectRatio = track->v.i_sarNum; - _sourceAspectRatioDenominator = track->v.i_sarDen; - _frameRate = track->v.i_fpsNum; - _frameRateDenominator = track->v.i_fpsDen; + if (self && p_track != NULL) { + _codec = toNSStr(p_track->psz_codec); + _language = toNSStr(p_track->psz_language); + _trackDescription = toNSStr(p_track->psz_description); + _trackType = p_track->i_type; + _bitrate = p_track->i_bitrate; + + _numberOfAudioChannels = p_track->a.i_nbChannels; + _audioSampleRate = p_track->a.i_sampleRate; + + _videoHeight = p_track->v.i_height; + _videoWidth = p_track->v.i_width; + _sourceAspectRatio = p_track->v.i_sarNum; + _sourceAspectRatioDenominator = p_track->v.i_sarDen; + _frameRate = p_track->v.i_fpsNum; + _frameRateDenominator = p_track->v.i_fpsDen; } return self; } @@ -78,6 +78,54 @@ @end +@implementation VLCMediaLibraryMovie + +- (instancetype)initWithMovie:(struct vlc_ml_movie_t *)p_movie +{ + self = [super init]; + if (self && p_movie != NULL) { + _summary = toNSStr(p_movie->psz_summary); + _imdbID = toNSStr(p_movie->psz_imdb_id); + } + return self; +} + +@end + +@implementation VLCMediaLibraryShowEpisode + +- (instancetype)initWithShowEpisode:(struct vlc_ml_show_episode_t *)p_showEpisode +{ + self = [super init]; + if (self && p_showEpisode != NULL) { + _summary = toNSStr(p_showEpisode->psz_summary); + _tvdbID = toNSStr(p_showEpisode->psz_tvdb_id); + _episodeNumber = p_showEpisode->i_episode_nb; + _seasonNumber = p_showEpisode->i_season_number; + } + return self; +} + +@end + +@implementation VLCMediaLibraryAlbumTrack + +- (instancetype)initWithAlbumTrack:(struct vlc_ml_album_track_t *)p_albumTrack +{ + self = [super init]; + if (self && p_albumTrack != NULL) { + _artistID = p_albumTrack->i_artist_id; + _albumID = p_albumTrack->i_album_id; + _genreID = p_albumTrack->i_genre_id; + + _trackNumber = p_albumTrack->i_track_nb; + _discNumber = p_albumTrack->i_disc_nb; + } + return self; +} + +@end + @implementation VLCMediaLibraryMediaItem - (instancetype)initWithMediaItem:(struct vlc_ml_media_t *)p_mediaItem @@ -111,9 +159,23 @@ _artworkMRL = toNSStr(p_mediaItem->psz_artwork_mrl); _artworkGenerated = p_mediaItem->b_artwork_generated; _favorited = p_mediaItem->b_is_favorite; - _showEpisode = p_mediaItem->show_episode; - _movie = p_mediaItem->movie; - _albumTrack = p_mediaItem->album_track; + + switch (p_mediaItem->i_subtype) { + case VLC_ML_MEDIA_SUBTYPE_MOVIE: + _movie = [[VLCMediaLibraryMovie alloc] initWithMovie:&p_mediaItem->movie]; + break; + + case VLC_ML_MEDIA_SUBTYPE_SHOW_EPISODE: + _showEpisode = [[VLCMediaLibraryShowEpisode alloc] initWithShowEpisode:&p_mediaItem->show_episode]; + break; + + case VLC_ML_MEDIA_SUBTYPE_ALBUMTRACK: + _albumTrack = [[VLCMediaLibraryAlbumTrack alloc] initWithAlbumTrack:&p_mediaItem->album_track]; + break; + + default: + break; + } } return self; } -- GitLab