From cf70f1370260eb4847f27dda1477c5b6cda95251 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Felix=20Paul=20K=C3=BChne?= <felix@feepk.net>
Date: Wed, 8 May 2019 12:10:33 +0200
Subject: [PATCH] macosx/library: add abstractions for albums, artists and
 genres

---
 .../gui/macosx/library/VLCLibraryDataTypes.h  | 40 ++++++++++++++
 .../gui/macosx/library/VLCLibraryDataTypes.m  | 55 +++++++++++++++++++
 2 files changed, 95 insertions(+)

diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.h b/modules/gui/macosx/library/VLCLibraryDataTypes.h
index 67a8fac72969..eb7bdba8a803 100644
--- a/modules/gui/macosx/library/VLCLibraryDataTypes.h
+++ b/modules/gui/macosx/library/VLCLibraryDataTypes.h
@@ -79,6 +79,36 @@ NS_ASSUME_NONNULL_BEGIN
 
 @end
 
+@interface VLCMediaLibraryArtist : NSObject
+
+- (instancetype)initWithArtist:(struct vlc_ml_artist_t *)p_artist;
+
+@property (readonly) int64_t artistID;
+@property (readonly) NSString *name;
+@property (readonly) NSString *shortBiography;
+@property (readonly) NSString *artworkMRL;
+@property (readonly) NSString *musicBrainzID;
+@property (readonly) unsigned int numberOfAlbums;
+@property (readonly) unsigned int numberOfTracks;
+
+@end
+
+@interface VLCMediaLibraryAlbum : NSObject
+
+- (instancetype)initWithAlbum:(struct vlc_ml_album_t *)p_album;
+
+@property (readonly) int64_t albumID;
+@property (readonly) NSString *title;
+@property (readonly) NSString *summary;
+@property (readonly) NSString *artworkMRL;
+@property (readonly) NSString *artistName;
+@property (readonly) int64_t artistID;
+@property (readonly) size_t numberOfTracks;
+@property (readonly) unsigned int duration;
+@property (readonly) unsigned int year;
+
+@end
+
 @interface VLCMediaLibraryAlbumTrack : NSObject
 
 - (instancetype)initWithAlbumTrack:(struct vlc_ml_album_track_t *)p_albumTrack;
@@ -92,6 +122,16 @@ NS_ASSUME_NONNULL_BEGIN
 
 @end
 
+@interface VLCMediaLibraryGenre : NSObject
+
+- (instancetype)initWithGenre:(struct vlc_ml_genre_t *)p_genre;
+
+@property (readonly) int64_t genreID;
+@property (readonly) NSString *name;
+@property (readonly) size_t numberOfTracks;
+
+@end
+
 @interface VLCMediaLibraryMediaItem : NSObject
 
 + (nullable instancetype)mediaItemForLibraryID:(int64_t)libraryID;
diff --git a/modules/gui/macosx/library/VLCLibraryDataTypes.m b/modules/gui/macosx/library/VLCLibraryDataTypes.m
index 228b99076afc..e3211672a60b 100644
--- a/modules/gui/macosx/library/VLCLibraryDataTypes.m
+++ b/modules/gui/macosx/library/VLCLibraryDataTypes.m
@@ -111,6 +111,46 @@
 
 @end
 
+@implementation VLCMediaLibraryArtist
+
+- (instancetype)initWithArtist:(struct vlc_ml_artist_t *)p_artist;
+{
+    self = [super init];
+    if (self && p_artist != NULL) {
+        _artistID = p_artist->i_id;
+        _name = toNSStr(p_artist->psz_name);
+        _shortBiography = toNSStr(p_artist->psz_shortbio);
+        _artworkMRL = toNSStr(p_artist->psz_artwork_mrl);
+        _musicBrainzID = toNSStr(p_artist->psz_mb_id);
+        _numberOfAlbums = p_artist->i_nb_album;
+        _numberOfTracks = p_artist->i_nb_tracks;
+    }
+    return self;
+}
+
+@end
+
+@implementation VLCMediaLibraryAlbum
+
+- (instancetype)initWithAlbum:(struct vlc_ml_album_t *)p_album
+{
+    self = [super init];
+    if (self && p_album != NULL) {
+        _albumID = p_album->i_id;
+        _title = toNSStr(p_album->psz_title);
+        _summary = toNSStr(p_album->psz_summary);
+        _artworkMRL = toNSStr(p_album->psz_artwork_mrl);
+        _artistName = toNSStr(p_album->psz_artist);
+        _artistID = p_album->i_artist_id;
+        _numberOfTracks = p_album->i_nb_tracks;
+        _duration = p_album->i_duration;
+        _year = p_album->i_year;
+    }
+    return self;
+}
+
+@end
+
 @implementation VLCMediaLibraryAlbumTrack
 
 - (instancetype)initWithAlbumTrack:(struct vlc_ml_album_track_t *)p_albumTrack
@@ -129,6 +169,21 @@
 
 @end
 
+@implementation VLCMediaLibraryGenre
+
+- (instancetype)initWithGenre:(struct vlc_ml_genre_t *)p_genre
+{
+    self = [super init];
+    if (self && p_genre != NULL) {
+        _genreID = p_genre->i_id;
+        _name = toNSStr(p_genre->psz_name);
+        _numberOfTracks = p_genre->i_nb_tracks;
+    }
+    return self;
+}
+
+@end
+
 @interface VLCMediaLibraryMediaItem ()
 
 @property (readwrite, assign) vlc_medialibrary_t *p_mediaLibrary;
-- 
GitLab