Added multisource playlists. Doesn't play yet, and it shows the radio
[MenuTunes.git] / iTunesRemote.m
index a312eba..108c9ce 100755 (executable)
     return ITMTRemotePlayerStopped;
 }
 
-- (NSArray *)playlists
+/*- (NSArray *)playlists
 {
     long i = 0;
     const signed long numPlaylists = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"kocl:type('cPly'), '----':()" eventClass:@"core" eventID:@"cnte" appPSN:savedPSN];
     NSMutableArray *playlists = [[NSMutableArray alloc] initWithCapacity:numPlaylists];
     
-    ITDebugLog(@"Getting playlists.");
-    
     for (i = 1; i <= numPlaylists; i++) {
         const long j = i;
         NSString *sendStr = [NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'indx', want:type('cPly'), seld:long(%lu), from:'null'() } }",(unsigned long)j];
         NSString *theObj = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:sendStr eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
-        ITDebugLog(@"Adding playlist: %@", theObj);
         [playlists addObject:theObj];
     }
-    ITDebugLog(@"Finished getting playlists.");
     return [playlists autorelease];
+}*/
+
+//Full source awareness
+- (NSArray *)playlists
+{   unsigned long i,k;
+    const signed long numSources = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"kocl:type('cSrc'), '----':()" eventClass:@"core" eventID:@"cnte" appPSN:savedPSN];
+    NSMutableArray *allSources = [[NSMutableArray alloc] init];
+    
+    ITDebugLog(@"Getting playlists.");
+    for (k = 1; k <= numSources ; k++) {
+        const signed long numPlaylists = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:[NSString stringWithFormat:@"kocl:type('cPly'), '----':obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() }",k] eventClass:@"core" eventID:@"cnte" appPSN:savedPSN];
+        NSString *sourceName = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } }",k] eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
+        NSMutableArray *aSource = [[NSMutableArray alloc] init];
+        [aSource addObject:sourceName];
+        for (i = 1; i <= numPlaylists; i++) {
+            NSString *sendStr = [NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'indx', want:type('cPly'), seld:long(%u), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } } }",i,k];
+            NSString *theObj = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:sendStr eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
+            [aSource addObject:theObj];
+        }
+        [allSources addObject:aSource];
+        [aSource release];
+    }
+    ITDebugLog(@"Finished getting playlists.");
+    return [NSArray arrayWithArray:[allSources autorelease]];
 }
 
 - (int)numberOfSongsInPlaylistAtIndex:(int)index
             ITDebugLog(@"Getting current source done. Source: CD.");
             return ITMTRemoteCDSource;
             break;
+        case 'kShd':
+            ITDebugLog(@"Getting current source done. Source: Shared Library.");
+            return ITMTRemoteSharedLibrarySource;
+            break;
         case 'kUnk':
         case 'kLib':
-        case 'kShd':
         default:
             ITDebugLog(@"Getting current source done. Source: Library.");
             return ITMTRemoteLibrarySource;
     return finalString;
 }
 
+- (NSImage *)currentSongAlbumArt
+{
+    return nil;
+}
+
 - (float)currentSongRating
 {
     float temp1;
     return YES;
 }
 
+- (BOOL)switchToPlaylistAtIndex:(int)index ofSourceAtIndex:(int)index2
+{
+    ITDebugLog(@"Switching to playlist at index %i of source %i", index, index2);
+    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'indx', want:type('cPly'), seld:long(%lu), from:obj { form:'indx', want:type('cSrc'), seld:long('%lu'), from:() } }",index, index2] eventClass:@"hook" eventID:@"Play" appPSN:savedPSN];
+    //[NSString stringWithFormat:@"'----':obj { form:'indx', want:type('cPly'), seld:long(%lu), from:'null'() }, data:obj { form:'indx', want:type('cSrc'), seld:long('%lu'), from:'null'() }",index, index2]
+    ITDebugLog(@"Done switching to playlist at index %i of source %i", index, index2);
+    return YES;
+}
+
 - (BOOL)switchToSongAtIndex:(int)index
 {
     ITDebugLog(@"Switching to track at index %i", index);
 - (NSString*)formatTimeInSeconds:(long)seconds {
     long final = seconds;
     NSString *finalString;
-    if (final > 60) {
+    if (final >= 60) {
         if (final > 3600) {
             finalString = [NSString stringWithFormat:@"%i:%@:%@",(final / 3600),[self zeroSixty:(int)((final % 3600) / 60)],[self zeroSixty:(int)((final % 3600) % 60)]];
         } else {