X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/2f144305df58bb1af98d35200c2b9a358b8aa41f..f350bbd7ac106a9e5c4d09cf0a104f8581851dd2:/iTunesRemote.m diff --git a/iTunesRemote.m b/iTunesRemote.m index a30156c..d501091 100755 --- a/iTunesRemote.m +++ b/iTunesRemote.m @@ -102,10 +102,6 @@ switch (result) { - default: - case 'kPSS': - ITDebugLog(@"Getting player playing state done. Player state: Stopped"); - return ITMTRemotePlayerStopped; case 'kPSP': ITDebugLog(@"Getting player playing state done. Player state: Playing"); return ITMTRemotePlayerPlaying; @@ -118,6 +114,10 @@ case 'kPSF': ITDebugLog(@"Getting player playing state done. Player state: Forwarding"); return ITMTRemotePlayerForwarding; + case 'kPSS': + default: + ITDebugLog(@"Getting player playing state done. Player state: Stopped"); + return ITMTRemotePlayerStopped; } ITDebugLog(@"Getting player playing state done. Player state: Stopped"); return ITMTRemotePlayerStopped; @@ -157,15 +157,9 @@ ITDebugLog(@"Getting current source."); - fourcc = (unsigned long)[[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pKnd" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + fourcc = (unsigned long)[[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber :[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pKnd'), from:obj { form:'prop', want:type('prop'), seld:type('ctnr'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } } }"] eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + switch (fourcc) { - case 'kUnk': - case 'kLib': - case 'kShd': - default: - ITDebugLog(@"Getting current source done. Source: Library."); - return ITMTRemoteLibrarySource; - break; case 'kTun': ITDebugLog(@"Getting current source done. Source: Radio."); return ITMTRemoteRadioSource; @@ -182,6 +176,13 @@ ITDebugLog(@"Getting current source done. Source: CD."); return ITMTRemoteCDSource; break; + case 'kUnk': + case 'kLib': + case 'kShd': + default: + ITDebugLog(@"Getting current source done. Source: Library."); + return ITMTRemoteLibrarySource; + break; } } @@ -221,7 +222,7 @@ ITDebugLog(@"Getting song title at index %i.", index); temp1 = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'indx', want:type('cTrk'), seld:long(%lu), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } } }",index] eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; ITDebugLog(@"Getting song title at index %i done.", index); - return temp1; + return ( ([temp1 length]) ? temp1 : nil ) ; } - (int)currentAlbumTrackCount @@ -229,6 +230,7 @@ int temp1; ITDebugLog(@"Getting current album track count."); temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pTrC" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { temp1 = 0; } ITDebugLog(@"Getting current album track count done."); return temp1; } @@ -238,6 +240,7 @@ int temp1; ITDebugLog(@"Getting current song track."); temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pTrN" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { temp1 = 0; } ITDebugLog(@"Getting current song track done."); return temp1; } @@ -248,7 +251,7 @@ ITDebugLog(@"Getting current unique identifier."); temp1 = [NSString stringWithFormat:@"%i-%i", [self currentPlaylistIndex], [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pDID" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]]; ITDebugLog(@"Getting current unique identifier done."); - return temp1; + return ( ([temp1 length]) ? temp1 : nil ) ; } - (int)currentSongIndex @@ -266,25 +269,33 @@ ITDebugLog(@"Getting current song title."); temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pnam" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; ITDebugLog(@"Getting current song title done."); - return temp1; + return ( ([temp1 length]) ? temp1 : nil ) ; } - (NSString *)currentSongArtist { NSString *temp1; ITDebugLog(@"Getting current song artist."); - temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pArt" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + if ( [self currentPlaylistClass] != ITMTRemotePlayerRadioPlaylist ) { + temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pArt" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + } else { + temp1 = @""; + } ITDebugLog(@"Getting current song artist done."); - return temp1; + return ( ([temp1 length]) ? temp1 : nil ) ; } - (NSString *)currentSongAlbum { NSString *temp1; ITDebugLog(@"Getting current song album."); - temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pAlb" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + if ( [self currentPlaylistClass] != ITMTRemotePlayerRadioPlaylist ) { + temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pAlb" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + } else { + temp1 = @""; + } ITDebugLog(@"Getting current song album done."); - return temp1; + return ( ([temp1 length]) ? temp1 : nil ) ; } - (NSString *)currentSongGenre @@ -293,7 +304,7 @@ ITDebugLog(@"Getting current song genre."); temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pGen" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; ITDebugLog(@"Getting current song genre done."); - return temp1; + return ( ([temp1 length]) ? temp1 : nil ) ; } - (NSString *)currentSongLength @@ -301,6 +312,7 @@ NSString *temp1; ITDebugLog(@"Getting current song length."); temp1 = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pTim" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { temp1 = nil; } ITDebugLog(@"Getting current song length done."); return temp1; } @@ -309,6 +321,8 @@ { long duration; long current; + long final; + NSString *finalString; ITDebugLog(@"Getting current song remaining time."); @@ -316,8 +330,31 @@ sendTwoTierAEWithRequestedKeyForNumber:@"pDur" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; current = [[ITAppleEventCenter sharedCenter] sendAEWithRequestedKeyForNumber:@"pPos" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + + final = duration - current; + finalString = [self formatTimeInSeconds:final]; + + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { finalString = nil; } + ITDebugLog(@"Getting current song remaining time done."); - return [[NSNumber numberWithLong:duration - current] stringValue]; + + return finalString; +} + +- (NSString *)currentSongElapsed +{ + long final; + NSString *finalString; + + ITDebugLog(@"Getting current song elapsed time."); + + final = [[ITAppleEventCenter sharedCenter] + sendAEWithRequestedKeyForNumber:@"pPos" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + + finalString = [self formatTimeInSeconds:final]; + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { finalString = nil; } + ITDebugLog(@"Getting current song elapsed time done."); + return finalString; } - (float)currentSongRating @@ -326,6 +363,7 @@ ITDebugLog(@"Getting current song rating."); temp1 = ((float)[[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pRte" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:savedPSN] / 100.0); + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { temp1 = -1.0; } ITDebugLog(@"Getting current song rating done."); return temp1; } @@ -333,6 +371,7 @@ - (BOOL)setCurrentSongRating:(float)rating { ITDebugLog(@"Setting current song rating to %f.", rating); + if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { return NO; } [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu), '----':obj { form:'prop', want:type('prop'), seld:type('pRte'), from:obj { form:'indx', want:type('cTrk'), seld:long(%lu), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } } }",(long)(rating*100),[self currentSongIndex]] eventClass:@"core" eventID:@"setd" appPSN:savedPSN]; ITDebugLog(@"Setting current song rating to %f done.", rating); return YES; @@ -399,10 +438,16 @@ - (BOOL)shuffleEnabled { ITDebugLog(@"Getting shuffle enabled status."); + BOOL final; int result = [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKeyForNumber:@"pShf" fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + if (result != 0) { + final = YES; + } else { + final = NO; + } ITDebugLog(@"Getting shuffle enabled status done."); - return result; + return final; } - (BOOL)setShuffleEnabled:(BOOL)enabled @@ -446,16 +491,16 @@ ITDebugLog(@"Setting repeat mode to %i", repeatMode); switch (repeatMode) { - default: - case ITMTRemotePlayerRepeatOff: - m00f = "kRp0"; - break; case ITMTRemotePlayerRepeatOne: m00f = "kRp1"; break; case ITMTRemotePlayerRepeatAll: m00f = "kRpA"; break; + case ITMTRemotePlayerRepeatOff: + default: + m00f = "kRp0"; + break; } [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:'%s', '----':obj { form:'prop', want:type('prop'), seld:type('pRpt'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:() } }",m00f] eventClass:@"core" eventID:@"setd" appPSN:savedPSN]; ITDebugLog(@"Setting repeat mode to %c done", m00f); @@ -530,6 +575,7 @@ { ITDebugLog(@"Switching to EQ preset at index %i", index); // index should count from 0, but itunes counts from 1, so let's add 1. + [self setEqualizerEnabled:YES]; [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pEQP'), from:'null'() }, data:obj { form:'indx', want:type('cEQP'), seld:long(%lu), from:'null'() }",(index+1)] eventClass:@"core" eventID:@"setd" appPSN:savedPSN]; ITDebugLog(@"Done switching to EQ preset at index %i", index); return YES; @@ -580,4 +626,28 @@ return number; } +- (NSString*)formatTimeInSeconds:(long)seconds { + long final = seconds; + NSString *finalString; + 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 { + finalString = [NSString stringWithFormat:@"%i:%@",(final / 60),[self zeroSixty:(int)(final % 60)]]; + } + } else { + finalString = [NSString stringWithFormat:@"0:%@",[self zeroSixty:(int)final]]; + } + return finalString; +} +- (NSString*)zeroSixty:(int)seconds { + if ( (seconds < 10) && (seconds > 0) ) { + return [NSString stringWithFormat:@"0%i",seconds]; + } else if ( (seconds == 0) ) { + return [NSString stringWithFormat:@"00"]; + } else { + return [NSString stringWithFormat:@"%i",seconds]; + } +} + @end