Skip to content

Commit 98377e4

Browse files
committed
feat(ios): add models
1 parent fc7bb30 commit 98377e4

File tree

8 files changed

+785
-13
lines changed

8 files changed

+785
-13
lines changed

ios/MusicLibrary.mm

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,41 +19,69 @@ - (instancetype) init {
1919
}
2020

2121
- (void)getTracksAsync:(JS::NativeMusicLibrary::InternalTrackOptions &)options resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
22+
NSLog(@"🎵 [MusicLibrary.mm] getTracksAsync called from Objective-C");
23+
2224
NSDictionary *optionsDict = @{}; // Convert JS options to NSDictionary
2325
NSDictionary *result = [musicLibrary getTracksAsync:optionsDict];
26+
27+
NSLog(@"🎵 [MusicLibrary.mm] getTracksAsync resolved with result: %@", result);
2428
resolve(result);
2529
}
2630

2731
- (void)getTrackMetadataAsync:(nonnull NSString *)trackId resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
32+
NSLog(@"🎵 [MusicLibrary.mm] getTrackMetadataAsync called with trackId: %@", trackId);
33+
2834
NSDictionary *result = [musicLibrary getTrackMetadataAsync:trackId];
35+
36+
NSLog(@"🎵 [MusicLibrary.mm] getTrackMetadataAsync resolved with result: %@", result);
2937
resolve(result);
3038
}
3139

3240
- (void)getTracksByAlbumAsync:(nonnull NSString *)albumId resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
41+
NSLog(@"🎵 [MusicLibrary.mm] getTracksByAlbumAsync called with albumId: %@", albumId);
42+
3343
NSArray *result = [musicLibrary getTracksByAlbumAsync:albumId];
44+
45+
NSLog(@"🎵 [MusicLibrary.mm] getTracksByAlbumAsync resolved with result: %@", result);
3446
resolve(result);
3547
}
3648

3749
- (void)getTracksByArtistAsync:(nonnull NSString *)artistId options:(JS::NativeMusicLibrary::InternalTrackOptions &)options resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
50+
NSLog(@"🎵 [MusicLibrary.mm] getTracksByArtistAsync called with artistId: %@", artistId);
51+
3852
NSDictionary *optionsDict = @{}; // Convert JS options to NSDictionary
3953
NSDictionary *result = [musicLibrary getTracksByArtistAsync:artistId options:optionsDict];
54+
55+
NSLog(@"🎵 [MusicLibrary.mm] getTracksByArtistAsync resolved with result: %@", result);
4056
resolve(result);
4157
}
4258

4359
- (void)getAlbumsAsync:(JS::NativeMusicLibrary::InternalAlbumOptions &)options resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
60+
NSLog(@"🎵 [MusicLibrary.mm] getAlbumsAsync called from Objective-C");
61+
4462
NSDictionary *optionsDict = @{}; // Convert JS options to NSDictionary
4563
NSDictionary *result = [musicLibrary getAlbumsAsync:optionsDict];
64+
65+
NSLog(@"🎵 [MusicLibrary.mm] getAlbumsAsync resolved with result: %@", result);
4666
resolve(result);
4767
}
4868

4969
- (void)getAlbumsByArtistAsync:(nonnull NSString *)artistId resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
70+
NSLog(@"🎵 [MusicLibrary.mm] getAlbumsByArtistAsync called with artistId: %@", artistId);
71+
5072
NSArray *result = [musicLibrary getAlbumsByArtistAsync:artistId];
73+
74+
NSLog(@"🎵 [MusicLibrary.mm] getAlbumsByArtistAsync resolved with result: %@", result);
5175
resolve(result);
5276
}
5377

5478
- (void)getArtistsAsync:(JS::NativeMusicLibrary::InternalArtistOptions &)options resolve:(nonnull RCTPromiseResolveBlock)resolve reject:(nonnull RCTPromiseRejectBlock)reject {
79+
NSLog(@"🎵 [MusicLibrary.mm] getArtistsAsync called from Objective-C");
80+
5581
NSDictionary *optionsDict = @{}; // Convert JS options to NSDictionary
5682
NSDictionary *result = [musicLibrary getArtistsAsync:optionsDict];
83+
84+
NSLog(@"🎵 [MusicLibrary.mm] getArtistsAsync resolved with result: %@", result);
5785
resolve(result);
5886
}
5987

ios/MusicLibraryImpl.swift

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,37 +7,72 @@
77
import Foundation
88

99
@objc public class MusicLibraryImpl: NSObject {
10-
10+
1111
@objc public func getTracksAsync(_ options: [String: Any]) -> [String: Any] {
12-
return [
13-
"items": [],
14-
"hasNextPage": false,
15-
"endCursor": NSNull(),
16-
"totalCount": 0,
17-
]
12+
NSLog("🎵 [MusicLibrary] getTracksAsync called with options: %@", options)
13+
14+
let result = PaginatedResult<Track>(items: [], hasNextPage: false)
15+
let resultDict = result.toDictionary()
16+
17+
NSLog("🎵 [MusicLibrary] getTracksAsync returning: %@", resultDict)
18+
return resultDict
1819
}
1920

2021
@objc public func getTrackMetadataAsync(_ trackId: String) -> [String: Any] {
21-
return [:]
22+
NSLog("🎵 [MusicLibrary] getTrackMetadataAsync called with trackId: %@", trackId)
23+
24+
let metadata = TrackMetadata(id: trackId, duration: nil, bitrate: nil, sampleRate: nil, channels: nil, format: nil, title: nil, artist: nil, album: nil, year: nil, genre: nil, track: nil, disc: nil, composer: nil, lyricist: nil, lyrics: nil, albumArtist: nil, comment: nil)
25+
let resultDict = metadata.toDictionary()
26+
27+
NSLog("🎵 [MusicLibrary] getTrackMetadataAsync returning: %@", resultDict)
28+
return resultDict
2229
}
2330

2431
@objc public func getTracksByAlbumAsync(_ albumId: String) -> [[String: Any]] {
25-
return []
32+
NSLog("🎵 [MusicLibrary] getTracksByAlbumAsync called with albumId: %@", albumId)
33+
34+
let result: [[String: Any]] = []
35+
36+
NSLog("🎵 [MusicLibrary] getTracksByAlbumAsync returning: %@", result)
37+
return result
2638
}
2739

2840
@objc public func getTracksByArtistAsync(_ artistId: String, options: [String: Any]) -> [String: Any] {
29-
return [:]
41+
NSLog("🎵 [MusicLibrary] getTracksByArtistAsync called with artistId: %@, options: %@", artistId, options)
42+
43+
let result = PaginatedResult<Track>(items: [], hasNextPage: false)
44+
let resultDict = result.toDictionary()
45+
46+
NSLog("🎵 [MusicLibrary] getTracksByArtistAsync returning: %@", resultDict)
47+
return resultDict
3048
}
3149

3250
@objc public func getAlbumsAsync(_ options: [String: Any]) -> [String: Any] {
33-
return [:]
51+
NSLog("🎵 [MusicLibrary] getAlbumsAsync called with options: %@", options)
52+
53+
let result = PaginatedResult<Album>(items: [], hasNextPage: false)
54+
let resultDict = result.toDictionary()
55+
56+
NSLog("🎵 [MusicLibrary] getAlbumsAsync returning: %@", resultDict)
57+
return resultDict
3458
}
3559

3660
@objc public func getAlbumsByArtistAsync(_ artistId: String) -> [[String: Any]] {
37-
return []
61+
NSLog("🎵 [MusicLibrary] getAlbumsByArtistAsync called with artistId: %@", artistId)
62+
63+
let result: [[String: Any]] = []
64+
65+
NSLog("🎵 [MusicLibrary] getAlbumsByArtistAsync returning: %@", result)
66+
return result
3867
}
3968

4069
@objc public func getArtistsAsync(_ options: [String: Any]) -> [String: Any] {
41-
return [:]
70+
NSLog("🎵 [MusicLibrary] getArtistsAsync called with options: %@", options)
71+
72+
let result = PaginatedResult<Artist>(items: [], hasNextPage: false)
73+
let resultDict = result.toDictionary()
74+
75+
NSLog("🎵 [MusicLibrary] getArtistsAsync returning: %@", resultDict)
76+
return resultDict
4277
}
4378
}

ios/models/Assets.swift

Lines changed: 196 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,196 @@
1+
//
2+
// Assets.swift
3+
// MusicLibrary
4+
//
5+
//
6+
7+
import Foundation
8+
9+
// MARK: - Data Models
10+
11+
public class Track: NSObject {
12+
public let id: String
13+
public let title: String
14+
public let artist: String?
15+
public let artwork: String?
16+
public let album: String?
17+
public let duration: Double
18+
public let url: String
19+
public let createdAt: Double?
20+
public let modifiedAt: Double?
21+
public let fileSize: Int64
22+
23+
public init(id: String, title: String, artist: String?, artwork: String?, album: String?, duration: Double, url: String, createdAt: Double?, modifiedAt: Double?, fileSize: Int64) {
24+
self.id = id
25+
self.title = title
26+
self.artist = artist
27+
self.artwork = artwork
28+
self.album = album
29+
self.duration = duration
30+
self.url = url
31+
self.createdAt = createdAt
32+
self.modifiedAt = modifiedAt
33+
self.fileSize = fileSize
34+
super.init()
35+
}
36+
37+
public func toDictionary() -> [String: Any] {
38+
return [
39+
"id": id,
40+
"title": title,
41+
"artist": artist ?? NSNull(),
42+
"artwork": artwork ?? NSNull(),
43+
"album": album ?? NSNull(),
44+
"duration": duration,
45+
"url": url,
46+
"createdAt": createdAt ?? NSNull(),
47+
"modifiedAt": modifiedAt ?? NSNull(),
48+
"fileSize": fileSize
49+
]
50+
}
51+
}
52+
53+
public class TrackMetadata: NSObject {
54+
public let id: String
55+
56+
// AudioHeader
57+
public let duration: Double?
58+
public let bitrate: Int64?
59+
public let sampleRate: Int?
60+
public let channels: String?
61+
public let format: String?
62+
63+
// Tag
64+
public let title: String?
65+
public let artist: String?
66+
public let album: String?
67+
public let year: Int?
68+
public let genre: String?
69+
public let track: Int?
70+
public let disc: Int?
71+
public let composer: String?
72+
public let lyricist: String?
73+
public let lyrics: String?
74+
public let albumArtist: String?
75+
public let comment: String?
76+
77+
public init(id: String, duration: Double?, bitrate: Int64?, sampleRate: Int?, channels: String?, format: String?, title: String?, artist: String?, album: String?, year: Int?, genre: String?, track: Int?, disc: Int?, composer: String?, lyricist: String?, lyrics: String?, albumArtist: String?, comment: String?) {
78+
self.id = id
79+
self.duration = duration
80+
self.bitrate = bitrate
81+
self.sampleRate = sampleRate
82+
self.channels = channels
83+
self.format = format
84+
self.title = title
85+
self.artist = artist
86+
self.album = album
87+
self.year = year
88+
self.genre = genre
89+
self.track = track
90+
self.disc = disc
91+
self.composer = composer
92+
self.lyricist = lyricist
93+
self.lyrics = lyrics
94+
self.albumArtist = albumArtist
95+
self.comment = comment
96+
super.init()
97+
}
98+
99+
public func toDictionary() -> [String: Any] {
100+
return [
101+
"id": id,
102+
"duration": duration ?? NSNull(),
103+
"bitrate": bitrate ?? NSNull(),
104+
"sampleRate": sampleRate ?? NSNull(),
105+
"channels": channels ?? NSNull(),
106+
"format": format ?? NSNull(),
107+
"title": title ?? NSNull(),
108+
"artist": artist ?? NSNull(),
109+
"album": album ?? NSNull(),
110+
"year": year ?? NSNull(),
111+
"genre": genre ?? NSNull(),
112+
"track": track ?? NSNull(),
113+
"disc": disc ?? NSNull(),
114+
"composer": composer ?? NSNull(),
115+
"lyricist": lyricist ?? NSNull(),
116+
"lyrics": lyrics ?? NSNull(),
117+
"albumArtist": albumArtist ?? NSNull(),
118+
"comment": comment ?? NSNull()
119+
]
120+
}
121+
}
122+
123+
public class Album: NSObject {
124+
public let id: String
125+
public let title: String
126+
public let artist: String
127+
public let artwork: String?
128+
public let trackCount: Int
129+
public let year: Int?
130+
131+
public init(id: String, title: String, artist: String, artwork: String?, trackCount: Int, year: Int?) {
132+
self.id = id
133+
self.title = title
134+
self.artist = artist
135+
self.artwork = artwork
136+
self.trackCount = trackCount
137+
self.year = year
138+
super.init()
139+
}
140+
141+
public func toDictionary() -> [String: Any] {
142+
return [
143+
"id": id,
144+
"title": title,
145+
"artist": artist,
146+
"artwork": artwork ?? NSNull(),
147+
"trackCount": trackCount,
148+
"year": year ?? NSNull()
149+
]
150+
}
151+
}
152+
153+
public class Artist: NSObject {
154+
public let id: String
155+
public let title: String
156+
public let albumCount: Int
157+
public let trackCount: Int
158+
159+
public init(id: String, title: String, albumCount: Int, trackCount: Int) {
160+
self.id = id
161+
self.title = title
162+
self.albumCount = albumCount
163+
self.trackCount = trackCount
164+
super.init()
165+
}
166+
167+
public func toDictionary() -> [String: Any] {
168+
return [
169+
"id": id,
170+
"title": title,
171+
"albumCount": albumCount,
172+
"trackCount": trackCount
173+
]
174+
}
175+
}
176+
177+
public class Genre: NSObject {
178+
public let id: String
179+
public let title: String
180+
public let trackCount: Int
181+
182+
public init(id: String, title: String, trackCount: Int) {
183+
self.id = id
184+
self.title = title
185+
self.trackCount = trackCount
186+
super.init()
187+
}
188+
189+
public func toDictionary() -> [String: Any] {
190+
return [
191+
"id": id,
192+
"title": title,
193+
"trackCount": trackCount
194+
]
195+
}
196+
}

0 commit comments

Comments
 (0)