Added checking to prevent cascading threads and server checks.
[MenuTunes.git] / iTunesRemote.m
index d11a29a..b4a745c 100755 (executable)
 {
     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) &&
-         [[[[NSWorkspace sharedWorkspace] activeApplication] objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"] ) {
-        //set minimized of browser window 1 to true
-        [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+    if ([self playerRunningState] == ITMTRemotePlayerRunning) {
+        ITDebugLog(@"Showing player interface.");
+        //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) &&
+             [[[[NSWorkspace sharedWorkspace] activeApplication] objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"] ) {
+            //set minimized of browser window 1 to true
+            [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+        } else {
+            //set minimized of browser window 1 to false
+            [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(0), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+        }
+        //set visible of browser window 1 to true
+        [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+        //active iTunes
+        [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pisf'), from:'null'() }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+        ITDebugLog(@"Done showing player primary interface.");
+        return YES;
     } else {
-        //set minimized of browser window 1 to false
-        [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(0), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
+        NSString *path;
+        ITDebugLog(@"Launching player.");
+        if ( (path = [[NSUserDefaults standardUserDefaults] stringForKey:@"CustomPlayerPath"]) ) {
+        } else {
+            path = [self playerFullName];
+        }
+        if (![[NSWorkspace sharedWorkspace] launchApplication:path]) {
+            ITDebugLog(@"Error Launching Player");
+            return NO;
+        }
+        return YES;
     }
-    //set visible of browser window 1 to true
-    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
-    //active iTunes
-    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pisf'), from:'null'() }" eventClass:@"core" eventID:@"setd" appPSN:savedPSN];
-    ITDebugLog(@"Done showing player primary interface.");
-    return YES;
 }
 
 - (ITMTRemotePlayerRunningState)playerRunningState
         unsigned long class;
         if (sourceName) {
             NSMutableArray *aSource = [[NSMutableArray alloc] init];
-            [aSource addObject:[[sourceName copy] autorelease]];
+            [aSource addObject:sourceName];
             switch (fourcc) {
                 case 'kTun':
                     class = ITMTRemoteRadioSource;
                 NSString *theObj = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:sendStr eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
                 ITDebugLog(@" - Adding playlist %@", theObj);
                 if (theObj) {
-                    [aSource addObject:[[theObj copy] autorelease]];
+                    [aSource addObject:theObj];
                 }
             }
             [allSources addObject:[aSource autorelease]];
     return ( ([temp1 length]) ? temp1 : nil ) ;
 }
 
+- (NSString *)currentSongComposer
+{
+    NSString *temp1;
+    ITDebugLog(@"Getting current song artist.");
+    if ( [self currentPlaylistClass] != ITMTRemotePlayerRadioPlaylist ) {
+        temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pCmp" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
+    } else {
+        temp1 = @"";
+    }
+    ITDebugLog(@"Getting current song artist done.");
+    return ( ([temp1 length]) ? temp1 : nil ) ;
+}
+
 - (NSString *)currentSongAlbum
 {
     NSString *temp1;
     ITDebugLog(@"Getting equalizer enabled status.");
     int thingy = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:@"'----':obj { form:type('prop'), want:type('prop'), seld:type('pEQ '), from:() }" eventClass:@"core" eventID:@"getd" appPSN:savedPSN];
     ITDebugLog(@"Done getting equalizer enabled status.");
-    return thingy;
+    return (thingy != 0) ? YES : NO;
 }
 
 - (BOOL)setEqualizerEnabled:(BOOL)enabled
         {
             if ([(NSString *)name isEqualToString:@"iTunes"])
             {
-                ITDebugLog(@"iTunes' highLongOfPSN: %lu.", number.highLongOfPSN);
+                ITDebugLog(@"iTunes' highLPongOfPSN: %lu.", number.highLongOfPSN);
                 ITDebugLog(@"iTunes' lowLongOfPSN: %lu.", number.lowLongOfPSN);
                 ITDebugLog(@"Done getting iTunes' PSN.");
                 return number;