-
-
Save nevyn/2368290 to your computer and use it in GitHub Desktop.
Waiting for multiple tiers to load in an object graph
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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