Skip to content

Instantly share code, notes, and snippets.

@nevyn
Forked from iKenndac/gist:2368081
Created April 12, 2012 15:37
Show Gist options
  • Save nevyn/2368290 to your computer and use it in GitHub Desktop.
Save nevyn/2368290 to your computer and use it in GitHub Desktop.
Waiting for multiple tiers to load in an object graph
// Assume that there is a -(TCTask*)load method on these objects
-(void)fillTrackPool {
[[SPSession sharedSession] load].then(^(SPSession *sess) {
return sess.userPlaylists.load;
}).then(^(SPPlaylistContainer *container) ^{
NSMutableArray *playlists = [NSMutableArray array];
[playlists addObject:sess.starredPlaylist];
[playlists addObject:sess.inboxPlaylist];
[playlists addObjectsFromArray:container.flattenedPlaylists];
return [TCTask waitAll:[playlists valueForKeyPath:@"load"]];
}).then(^(NSArray *loadedPlaylists) {
NSArray *playlistItems = [loadedPlaylists valueForKeyPath:@"@unionOfArrays.items"];
NSArray *tracks = [self tracksFromPlaylistItems:playlistItems];
return [TCTask waitAll:[tracks valueForKeyPath:@"load"]];
}).then(^(NSArray *loadedTracks) {
NSMutableArray *theTrackPool = [NSMutableArray arrayWithCapacity:loadedTracks.count];
for (SPTrack *aTrack in loadedTracks) {
if (aTrack.availability == SP_TRACK_AVAILABILITY_AVAILABLE && [aTrack.name length] > 0)
[theTrackPool addObject:aTrack];
}
self.trackPool = [NSMutableArray arrayWithArray:[[NSSet setWithArray:theTrackPool] allObjects]];
// ^ Thin out duplicates.
[self startNewRound];
})
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment