X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/31ab86a87f78edfdd32810db1ff708ca8f5eaaca..b28cde9af5f0de2466cb62fa8e43c60fc58bf948:/iTunesRemote.m?ds=sidebyside diff --git a/iTunesRemote.m b/iTunesRemote.m index 36a38db..27d346e 100755 --- a/iTunesRemote.m +++ b/iTunesRemote.m @@ -1,6 +1,5 @@ #import "iTunesRemote.h" - @implementation iTunesRemote + (id)remote @@ -10,12 +9,12 @@ - (NSString *)title { - return nil; + return @"iTunes Plug-in"; } - (NSString *)information; { - return nil; + return @"Default MenuTunes plugin to control iTunes."; } - (NSImage *)icon @@ -25,72 +24,123 @@ - (BOOL)begin { - return NO; + iTunesPSN = [self iTunesPSN]; + + //Register for application termination in NSWorkspace + + NSLog(@"iTunes Plugin loaded"); + return YES; } - (BOOL)halt { - return NO; + iTunesPSN.highLongOfPSN = kNoProcess; + + //Unregister for application termination in NSWorkspace + return YES; } - (NSArray *)sources { + //This is probably unneeded return nil; } - (int)currentSourceIndex { + //This is probably unneeded return nil; } - (NSArray *)playlistsForCurrentSource { + //This is probably unneeded return nil; } +- (NSString *)sourceTypeOfCurrentPlaylist +{ + //Not working yet. It returns the 4 character code instead of a name. + NSString *result; + result = [[ITAppleEventCenter sharedCenter] + sendTwoTierAEWithRequestedKey:@"pcls" + fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; + return result; +} + - (int)currentPlaylistIndex { - return nil; + int result; + result = [[ITAppleEventCenter sharedCenter] + sendTwoTierAEWithRequestedKeyForNumber:@"pidx" + fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; + return result; } - (NSString *)songTitleAtIndex { - return nil; + return nil; } - (int)currentSongIndex { - return nil; + int result; + result = [[ITAppleEventCenter sharedCenter] + sendTwoTierAEWithRequestedKeyForNumber:@"pidx" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; + return result; } - (NSString *)currentSongTitle { - return nil; + return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pnam" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; } - (NSString *)currentSongArtist { - return nil; + return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pArt" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; } - (NSString *)currentSongAlbum { - return nil; + return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pAlb" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; } - (NSString *)currentSongGenre { - return nil; + return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pGen" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; } - (NSString *)currentSongLength { - return nil; + return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pDur" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; } - (NSString *)currentSongRemaining { - return nil; + long duration = [[ITAppleEventCenter sharedCenter] + sendTwoTierAEWithRequestedKeyForNumber:@"pDur" + fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; + long current = [[ITAppleEventCenter sharedCenter] + sendAEWithRequestedKeyForNumber:@"pPos" + eventClass:@"core" eventID:@"getd" + appPSN:[self iTunesPSN]]; + + return [[NSNumber numberWithLong:duration - current] stringValue]; } - (NSArray *)eqPresets; @@ -100,36 +150,47 @@ - (BOOL)play { - return NO; + [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Play" + appPSN:[self iTunesPSN]]; + return YES; } - (BOOL)pause { - return NO; + [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Paus" + appPSN:[self iTunesPSN]]; + return YES; } - (BOOL)goToNextSong { - return NO; + [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Next" + appPSN:[self iTunesPSN]]; + return YES; } - (BOOL)goToPreviousSong { - return NO; + [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Prev" + appPSN:[self iTunesPSN]]; + return YES; } - (BOOL)goToNextPlaylist { + //This is probably unneeded return NO; } - (BOOL)goToPreviousPlaylist { + //This is probably unneeded return NO; } - (BOOL)switchToSourceAtIndex:(int)index { + //This is probably unneeded return NO; } @@ -148,4 +209,25 @@ return NO; } +- (ProcessSerialNumber)iTunesPSN +{ + NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications]; + ProcessSerialNumber number; + int i; + + number.highLongOfPSN = kNoProcess; + + for (i = 0; i < [apps count]; i++) + { + NSDictionary *curApp = [apps objectAtIndex:i]; + + if ([[curApp objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"]) + { + number.highLongOfPSN = [[curApp objectForKey:@"NSApplicationProcessSerialNumberHigh"] intValue]; + number.lowLongOfPSN = [[curApp objectForKey:@"NSApplicationProcessSerialNumberLow"] intValue]; + } + } + return number; +} + @end