Added/removed some methods.
[MenuTunes.git] / iTunesRemote.m
1 #import "iTunesRemote.h"
2
3 @implementation iTunesRemote
4
5 + (id)remote
6 {
7     return [[[iTunesRemote alloc] init] autorelease];
8 }
9
10 - (NSString *)title
11 {
12     return @"iTunes Plug-in";
13 }
14
15 - (NSString *)information;
16 {
17     return @"Default MenuTunes plugin to control iTunes.";
18 }
19
20 - (NSImage *)icon
21 {
22     return nil;
23 }
24
25 - (BOOL)begin
26 {
27     iTunesPSN = [self iTunesPSN];
28     
29     //Register for application termination in NSWorkspace
30     
31     NSLog(@"iTunes Plugin loaded");
32     return YES;
33 }
34
35 - (BOOL)halt
36 {
37     iTunesPSN.highLongOfPSN = kNoProcess;
38     
39     //Unregister for application termination in NSWorkspace
40     return YES;
41 }
42
43 - (int)numberOfSongsInPlaylistAtIndex:(int)index
44 {
45     return [[ITAppleEventCenter sharedCenter]
46                     sendAEWithSendStringForNumber:@"cPla"
47                     eventClass:@"core" eventID:@"cnte"
48                     appPSN:[self iTunesPSN]];
49 }
50
51 - (NSString *)classOfPlaylistAtIndex:(int)index
52 {
53     //Not working yet. It returns the 4 character code instead of a name.
54     NSString *result;
55     result = [[ITAppleEventCenter sharedCenter]
56                 sendTwoTierAEWithRequestedKey:@"pcls"
57                 fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd"
58                 appPSN:[self iTunesPSN]];
59     return result;
60 }
61
62 - (int)currentPlaylistIndex
63 {
64     int result;
65     result = [[ITAppleEventCenter sharedCenter]
66                 sendTwoTierAEWithRequestedKeyForNumber:@"pidx"
67                 fromObjectByKey:@"pPla" eventClass:@"core" eventID:@"getd"
68                 appPSN:[self iTunesPSN]];
69     return result;
70 }
71
72 - (NSString *)songTitleAtIndex:(int)index
73 {
74     return nil; 
75 }
76
77 - (int)currentSongIndex
78 {
79     int result;
80     result = [[ITAppleEventCenter sharedCenter]
81                 sendTwoTierAEWithRequestedKeyForNumber:@"pidx"
82                 fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
83                 appPSN:[self iTunesPSN]];
84     return result;
85 }
86
87 - (NSString *)currentSongTitle
88 {
89     return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pnam"
90                 fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
91                 appPSN:[self iTunesPSN]];
92 }
93
94 - (NSString *)currentSongArtist
95 {
96     return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pArt"
97                 fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
98                 appPSN:[self iTunesPSN]];
99 }
100
101 - (NSString *)currentSongAlbum
102 {
103     return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pAlb"
104                 fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
105                 appPSN:[self iTunesPSN]];
106 }
107
108 - (NSString *)currentSongGenre
109 {
110     return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pGen"
111                 fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
112                 appPSN:[self iTunesPSN]];
113 }
114
115 - (NSString *)currentSongLength
116 {
117     return [[ITAppleEventCenter sharedCenter] sendTwoTierAEWithRequestedKey:@"pDur"
118                 fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
119                 appPSN:[self iTunesPSN]];
120 }
121
122 - (NSString *)currentSongRemaining
123 {
124     long duration = [[ITAppleEventCenter sharedCenter]
125                         sendTwoTierAEWithRequestedKeyForNumber:@"pDur"
126                         fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd"
127                         appPSN:[self iTunesPSN]];
128     long current = [[ITAppleEventCenter sharedCenter]
129                         sendAEWithRequestedKeyForNumber:@"pPos"
130                         eventClass:@"core" eventID:@"getd"
131                         appPSN:[self iTunesPSN]];
132     
133     return [[NSNumber numberWithLong:duration - current] stringValue];
134 }
135
136 - (NSArray *)eqPresets;
137 {
138     return nil;
139 }
140
141 - (BOOL)play
142 {
143     [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Play"
144             appPSN:[self iTunesPSN]];
145     return YES;
146 }
147
148 - (BOOL)pause
149 {
150     [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Paus"
151             appPSN:[self iTunesPSN]];
152     return YES;
153 }
154
155 - (BOOL)goToNextSong
156 {
157     [self numberOfSongsInPlaylistAtIndex:1];
158     //[[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Next"
159     //        appPSN:[self iTunesPSN]];
160     return YES;
161 }
162
163 - (BOOL)goToPreviousSong
164 {
165     [[ITAppleEventCenter sharedCenter] sendAEWithEventClass:@"hook" eventID:@"Prev"
166             appPSN:[self iTunesPSN]];
167     return YES;
168 }
169
170 - (BOOL)switchToPlaylistAtIndex:(int)index
171 {
172     return NO;
173 }
174
175 - (BOOL)switchToSongAtIndex:(int)index
176 {
177     return NO;
178 }
179
180 - (BOOL)switchToEQAtIndex:(int)index
181 {
182     return NO;
183 }
184
185 - (ProcessSerialNumber)iTunesPSN
186 {
187     NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications];
188     ProcessSerialNumber number;
189     int i;
190     
191     number.highLongOfPSN = kNoProcess;
192     
193     for (i = 0; i < [apps count]; i++)
194     {
195         NSDictionary *curApp = [apps objectAtIndex:i];
196         
197         if ([[curApp objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"])
198         {
199             number.highLongOfPSN = [[curApp objectForKey:@"NSApplicationProcessSerialNumberHigh"] intValue];
200             number.lowLongOfPSN = [[curApp objectForKey:@"NSApplicationProcessSerialNumberLow"] intValue];
201         }
202     }
203     return number;
204 }
205
206 @end