I am trying to retrieve the user's playlists. I referred to the sample Guess The Intro from cocoalibspotify, however I am only getting 2 tracks of which are from the starred tracks. Is there anything that I missed? Also, can api/toplists be an alternative for this? I am more used to consuming json data so if there is an alternative to cocoalibspotify for retrieving the user's playlists, I would like to give it a try.
-(NSArray *)tracksFromPlaylistItems:(NSArray *)items {
NSMutableArray *tracks = [NSMutableArray arrayWithCapacity:items.count];
for (SPPlaylistItem *anItem in items) {
if (anItem.itemClass == [SPTrack class]) {
[tracks addObject:anItem.item];
}
}
return [NSArray arrayWithArray:tracks];
}
-(void)getMyTracks {
[SPAsyncLoading waitUntilLoaded:[SPSession sharedSession] timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedSession, NSArray *notLoadedSession) {
NSLog(@"SPOTIFY [%@ %@]: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"Session loaded.");
[SPAsyncLoading waitUntilLoaded:[SPSession sharedSession] timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedContainers, NSArray *notLoadedContainers) {
NSLog(@"[%@ %@]: %@", NSStringFromClass([self class]), NSStringFromSelector(_cmd), @"Container loaded.");
NSMutableArray *playlists = [NSMutableArray array];
[playlists addObjectsFromArray:[SPSession sharedSession].userPlaylists.playlists];
[playlists addObject:[SPSession sharedSession].starredPlaylist];
[playlists addObject:[SPSession sharedSession].inboxPlaylist];
//[playlists addObjectsFromArray:[SPSession sharedSession].userPlaylists.flattenedPlaylists];
[SPAsyncLoading waitUntilLoaded:playlists timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedPlaylists, NSArray *notLoadedPlaylists) {
// All of our playlists have loaded their metadata — wait for all tracks to load their metadata.
NSLog(@"[%@ %@]: %@ of %@ playlists loaded.", NSStringFromClass([self class]), NSStringFromSelector(_cmd),
[NSNumber numberWithInteger:loadedPlaylists.count], [NSNumber numberWithInteger:loadedPlaylists.count + notLoadedPlaylists.count]);
NSArray *playlistItems = [loadedPlaylists valueForKeyPath:@"@unionOfArrays.items"];
NSArray *tracks = [self tracksFromPlaylistItems:playlistItems];
[SPAsyncLoading waitUntilLoaded:tracks timeout:kSPAsyncLoadingDefaultTimeout then:^(NSArray *loadedTracks, NSArray *notLoadedTracks) {
// All of our tracks have loaded their metadata. Hooray!
NSLog(@"[%@ %@]: %@ of %@ tracks loaded.", NSStringFromClass([self class]), NSStringFromSelector(_cmd),
[NSNumber numberWithInteger:loadedTracks.count], [NSNumber numberWithInteger:loadedTracks.count + notLoadedTracks.count]);
NSMutableArray *theTrackPool = [NSMutableArray arrayWithCapacity:loadedTracks.count];
for (SPTrack *track in loadedTracks) {
if (track.availability == SP_TRACK_AVAILABILITY_AVAILABLE && [track.name length] > 0) {
NSLog(@"TRACK %@ %@ %@",track.name,track.artists,track.album.name);
}
}
}];
}];
}];
}];
}