w00t. If player application is not running, instead of simply saying so,
[MenuTunes.git] / iTunesRemote.m
index ce496f8..e286598 100755 (executable)
                 nil];
 }
 
+- (BOOL)showPrimaryInterface
+{
+    return NO;
+}
+
 - (ITMTRemotePlayerRunningState)playerRunningState
 {
     NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications];
     return [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:[NSString stringWithFormat:@"kocl:type('cTrk'), '----':obj { form:'indx', want:type('cPly'), seld:long(%lu), from:'null'() }",index] eventClass:@"core" eventID:@"cnte" appPSN:iTunesPSN];
 }
 
-- (NSString *)classOfPlaylistAtIndex:(int)index
+- (ITMTRemotePlayerPlaylistClass)classOfPlaylistAtIndex:(int)index
 {
     int realResult = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pcls" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
     
-    if (realResult == 'cRTP') {
-        return @"radio tuner playlist";
-    } else {
-        return @"playlist";
-    }
+
+    switch (realResult)
+          {
+          case 'cLiP':
+                 return ITMTRemotePlayerLibraryPlaylist;
+                 break;
+          case 'cRTP':
+                 return ITMTRemotePlayerRadioPlaylist;
+                 break;
+          default:
+                 return ITMTRemotePlayerPlaylist;
+          }
 }
 
 - (int)currentPlaylistIndex
 {
-    int result;
-    result = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pidx" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
-    return result;
+    return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pidx" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
 }
 
 - (NSString *)songTitleAtIndex:(int)index
 
 - (int)currentSongIndex
 {
-    int result;
-    result = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pidx" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
-    return result;
+    return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pidx" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
 }
 
 - (NSString *)currentSongTitle
 
 - (float)currentSongRating
 {
-    int realResult = [[ITAppleEventCenter sharedCenter]
-                sendTwoTierAEWithRequestedKeyForNumber:@"pRte" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
-
-    return realResult / 100;
+    return [[ITAppleEventCenter sharedCenter]
+                sendTwoTierAEWithRequestedKeyForNumber:@"pRte" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN] / 100;
 }
 
 - (BOOL)setCurrentSongRating:(float)rating
 {
-    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu), ----:obj { form:'prop', want:type('prop'), seld:type('pRte'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } ",(long)rating*100] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN];
+    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu) ----:obj { form:'prop', want:type('prop'), seld:type('pRte'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }",(long)rating*100] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN];
     return YES;
 }
 
 - (BOOL)equalizerEnabled
 {
-    return NO;
+    return [[ITAppleEventCenter sharedCenter]
+                        sendAEWithRequestedKeyForNumber:@"pEQ " eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
 }
 
 - (BOOL)setEqualizerEnabled:(BOOL)enabled
 {
-    return NO;
+[[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu) ----:obj { form:'prop', want:type('prop'), seld:type('pEQ '), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }",enabled] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN];
 }
 
 - (NSArray *)eqPresets
 
 - (BOOL)shuffleEnabled
 {
-    return NO;
+    int result = [[ITAppleEventCenter sharedCenter]
+                sendTwoTierAEWithRequestedKeyForNumber:@"pShf" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
+    return result;
 }
 
 - (BOOL)setShuffleEnabled:(BOOL)enabled
 {
-    return NO;
+    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu) ----:obj { form:'prop', want:type('prop'), seld:type('pShf'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }",enabled] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN];
 }
 
 - (ITMTRemotePlayerRepeatMode)repeatMode
 {
-    return ITMTRemotePlayerRepeatOff;
+    FourCharCode m00f;
+    int result;
+    m00f = [[ITAppleEventCenter sharedCenter]
+                sendTwoTierAEWithRequestedKeyForNumber:@"pRpt" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN];
+
+    switch (m00f)
+          {
+          case 'kRp0':
+                 result = ITMTRemotePlayerRepeatOff;
+                 break;
+          case 'kRp1':
+                 result = ITMTRemotePlayerRepeatOne;
+                 break;
+          case 'kRpA':
+                 result = ITMTRemotePlayerRepeatAll;
+                 break;
+          }
+    
+    return result;
 }
 
 - (BOOL)setRepeatMode:(ITMTRemotePlayerRepeatMode)repeatMode
 {
-    return NO;
+    FourCharCode m00f;
+    switch (repeatMode)
+          {
+          case ITMTRemotePlayerRepeatOff:
+                 m00f = 'kRp0';
+                 break;
+          case ITMTRemotePlayerRepeatOne:
+                 m00f = 'kRp1';
+                 break;
+          case ITMTRemotePlayerRepeatAll:
+                 m00f = 'kRpA';
+                 break;
+          }
+
+    [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu) ----:obj { form:'prop', want:type('pRpt'), seld:type('pShf'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }",m00f] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN];
+
 }
 
 - (BOOL)play