Fixed the STUPID BUG where the multisource playlist thing would crash
authorKent Sutherland <ksuther@ithinksw.com>
Wed, 4 Feb 2004 00:38:56 +0000 (00:38 +0000)
committerKent Sutherland <ksuther@ithinksw.com>
Wed, 4 Feb 2004 00:38:56 +0000 (00:38 +0000)
when iTunes restarts.

MenuController.m
iTunesRemote.h
iTunesRemote.m

index 4ab0bf4..dfd4f49 100755 (executable)
     if (_currentPlaylist && !_playingRadio) {
         if (numSongs > 0) {
             int i;
-
             for (i = _currentTrack + 1; i <= _currentTrack + numSongsInAdvance; i++) {
                 if (i <= numSongs) {
                     NSString *curSong;
     int i, j;
     NS_DURING
         playlists = [[[MainController sharedController] currentRemote] playlists];
+        /*playlists = [NSArray arrayWithObjects:
+                        [NSArray arrayWithObjects:@"Library", [NSNumber numberWithInt:-1], @"Library", @"Playlist", nil],
+                        [NSArray arrayWithObjects:@"Radio", [NSNumber numberWithInt:1], @"Radio", nil], nil];*/
     NS_HANDLER
         [[MainController sharedController] networkError:localException];
     NS_ENDHANDLER
index fc1e3a0..a5832bb 100755 (executable)
@@ -14,6 +14,7 @@
 
 @interface iTunesRemote : ITMTRemote <ITMTRemote>
 {
+    BOOL _winClosed;
     ProcessSerialNumber savedPSN;
 }
 - (ProcessSerialNumber)iTunesPSN;
index ad8a4b8..f330917 100755 (executable)
 - (BOOL)showPrimaryInterface
 {
     ITDebugLog(@"Showing player primary interface.");
+    
+    //If the window is closed
+    _winClosed = YES;
+    
     //If not minimized and visible
     if ( ([[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"'----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"getd" appPSN:savedPSN] == 0) &&
          ([[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"'----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"getd" appPSN:savedPSN] != 0) &&
 
 //Full source awareness
 - (NSArray *)playlists
-{   unsigned long i,k;
+{
+    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.");
+    if (numSources == 0) {
+        ITDebugLog(@"No sources.");
+        return nil;
+    }
+    
     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];
         unsigned long fourcc = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pKnd'), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } }",k] eventClass:@"core" eventID:@"getd" 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];
-        NSNumber *sourceClass;
+        unsigned long class;
         NSMutableArray *aSource = [[NSMutableArray alloc] init];
         [aSource addObject:sourceName];
         switch (fourcc) {
             case 'kTun':
-                sourceClass = [NSNumber numberWithInt:ITMTRemoteRadioSource];
+                class = ITMTRemoteRadioSource;
                 break;
             case 'kDev':
-                sourceClass = [NSNumber numberWithInt:ITMTRemoteGenericDeviceSource];
+                class = ITMTRemoteGenericDeviceSource;
                 break;
             case 'kPod':
-                sourceClass = [NSNumber numberWithInt:ITMTRemoteiPodSource];
+                class = ITMTRemoteiPodSource;
                 break;
             case 'kMCD':
             case 'kACD':
-                sourceClass = [NSNumber numberWithInt:ITMTRemoteCDSource];
+                class = ITMTRemoteCDSource;
                 break;
             case 'kShd':
-                sourceClass = [NSNumber numberWithInt:ITMTRemoteSharedLibrarySource];
+                class = ITMTRemoteSharedLibrarySource;
                 break;
             case 'kUnk':
             case 'kLib':
             default:
-                sourceClass = [NSNumber numberWithInt:ITMTRemoteLibrarySource];
+                class = ITMTRemoteLibrarySource;
                 break;
         }
-        ITDebugLog(@"Adding source %@ of type %i", sourceName, [sourceClass intValue]);
-        [aSource addObject:sourceClass];
+        ITDebugLog(@"Adding source %@ of type %i", sourceName, class);
+        [aSource addObject:[NSNumber numberWithInt:class]];
         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];
 {
     int temp1;
     ITDebugLog(@"Getting current song index.");
-    
-    if ([self currentSource] == ITMTRemoteRadioSource)
-    
     temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pidx" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
     ITDebugLog(@"Getting current song index done.");
     return temp1;