Added to checks to prevent memory leaks in iTunesRemote
} else if ([nextObject isEqualToString:@"trackInfo"]) {
ITDebugLog(@"Check to see if a Track is playing...");
//Handle playing radio too
} else if ([nextObject isEqualToString:@"trackInfo"]) {
ITDebugLog(@"Check to see if a Track is playing...");
//Handle playing radio too
- if (_currentPlaylist) {
+ if (_currentTrack != -1 && _currentPlaylist) {
NSString *title = nil;
NS_DURING
title = [mtr currentSongTitle];
NSString *title = nil;
NS_DURING
title = [mtr currentSongTitle];
ITDebugLog(@"Beginning Rebuild of \"EQ Presets\" submenu.");
_eqMenu = [self eqMenu];
}
ITDebugLog(@"Beginning Rebuild of \"EQ Presets\" submenu.");
_eqMenu = [self eqMenu];
}
if (_continue && [menu containsObject:@"artists"]) {
ITDebugLog(@"Releasing artists menu");
[_artistsMenu release];
if (_continue && [menu containsObject:@"artists"]) {
ITDebugLog(@"Releasing artists menu");
[_artistsMenu release];
[playlistsMenu release];
return nil;
}
[playlistsMenu release];
return nil;
}
NS_DURING
ITDebugLog(@"Building \"Playlists\" menu.");
{
NS_DURING
ITDebugLog(@"Building \"Playlists\" menu.");
{
ITDebugLog(@"Adding index to the index array.");
[indices addObject:[curPlaylist objectAtIndex:2]];
}
ITDebugLog(@"Adding index to the index array.");
[indices addObject:[curPlaylist objectAtIndex:2]];
}
if ([playlists count] > 1) {
if ([[[playlists objectAtIndex:1] objectAtIndex:1] intValue] == ITMTRemoteRadioSource) {
[indices addObject:[[playlists objectAtIndex:1] objectAtIndex:2]];
if ([playlists count] > 1) {
if ([[[playlists objectAtIndex:1] objectAtIndex:1] intValue] == ITMTRemoteRadioSource) {
[indices addObject:[[playlists objectAtIndex:1] objectAtIndex:2]];
[playlistsMenu addItem:[NSMenuItem separatorItem]];
}
}
[playlistsMenu addItem:[NSMenuItem separatorItem]];
}
}
if ([playlists count] > 1) {
for (i = 1; i < [playlists count]; i++) {
NSArray *curPlaylist = [playlists objectAtIndex:i];
if ([playlists count] > 1) {
for (i = 1; i < [playlists count]; i++) {
NSArray *curPlaylist = [playlists objectAtIndex:i];
}
ITDebugLog(@"Checking the current source.");
NS_DURING
}
ITDebugLog(@"Checking the current source.");
NS_DURING
- if ( (source == ITMTRemoteSharedLibrarySource) || (source == ITMTRemoteiPodSource) || (source == ITMTRemoteGenericDeviceSource) || (source == ITMTRemoteCDSource) ) {
- tempItem = [playlistsMenu itemAtIndex:[playlistsMenu numberOfItems] + [indices indexOfObject:[NSNumber numberWithInt:[[[MainController sharedController] currentRemote] currentSourceIndex]]] - [indices count]];
- [tempItem setState:NSOnState];
- [[[tempItem submenu] itemAtIndex:_currentPlaylist - 1] setState:NSOnState];
- } else if (source == ITMTRemoteLibrarySource && _currentPlaylist) {
- [[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState];
- }
+ if (_currentPlaylist != -1) {
+ if ( (source == ITMTRemoteSharedLibrarySource) || (source == ITMTRemoteiPodSource) || (source == ITMTRemoteGenericDeviceSource) || (source == ITMTRemoteCDSource) ) {
+ tempItem = [playlistsMenu itemAtIndex:[playlistsMenu numberOfItems] + [indices indexOfObject:[NSNumber numberWithInt:[[[MainController sharedController] currentRemote] currentSourceIndex]]] - [indices count]];
+ [tempItem setState:NSOnState];
+ [[[tempItem submenu] itemAtIndex:_currentPlaylist - 1] setState:NSOnState];
+ } else if (source == ITMTRemoteLibrarySource && _currentPlaylist) {
+ [[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState];
+ }
+ }
NS_HANDLER
NS_ENDHANDLER
[indices release];
NS_HANDLER
NS_ENDHANDLER
[indices release];
{
ProcessSerialNumber savedPSN;
}
{
ProcessSerialNumber savedPSN;
}
- (ProcessSerialNumber)iTunesPSN;
- (NSString*)formatTimeInSeconds:(long)seconds;
- (NSString*)zeroSixty:(int)seconds;
- (ProcessSerialNumber)iTunesPSN;
- (NSString*)formatTimeInSeconds:(long)seconds;
- (NSString*)zeroSixty:(int)seconds;
([ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }", 'core', 'getd', &savedPSN) booleanValue] != 0) &&
[[[[NSWorkspace sharedWorkspace] activeApplication] objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"] ) {
//set minimized of browser window 1 to true
([ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }", 'core', 'getd', &savedPSN) booleanValue] != 0) &&
[[[[NSWorkspace sharedWorkspace] activeApplication] objectForKey:@"NSApplicationName"] isEqualToString:@"iTunes"] ) {
//set minimized of browser window 1 to true
- ITSendAEWithString(@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }", 'core', 'setd', &savedPSN);
+ ITSendAEWithString(@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:long(1), from:'null'() } }", 'core', 'setd', &savedPSN);
} else {
//set minimized of browser window 1 to false
} else {
//set minimized of browser window 1 to false
- ITSendAEWithString(@"data:long(0), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }", 'core', 'setd', &savedPSN);
+ ITSendAEWithString(@"data:long(0), '----':obj { form:'prop', want:type('prop'), seld:type('pMin'), from:obj { form:'indx', want:type('cBrW'), seld:long(1), from:'null'() } }", 'core', 'setd', &savedPSN);
}
//set visible of browser window 1 to true
}
//set visible of browser window 1 to true
- ITSendAEWithString(@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:1, from:'null'() } }", 'core', 'setd', &savedPSN);
+ ITSendAEWithString(@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pvis'), from:obj { form:'indx', want:type('cBrW'), seld:long(1), from:'null'() } }", 'core', 'setd', &savedPSN);
//active iTunes
ITSendAEWithString(@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pisf'), from:'null'() }", 'core', 'setd', &savedPSN);
ITDebugLog(@"Done showing player primary interface.");
//active iTunes
ITSendAEWithString(@"data:long(1), '----':obj { form:'prop', want:type('prop'), seld:type('pisf'), from:'null'() }", 'core', 'setd', &savedPSN);
ITDebugLog(@"Done showing player primary interface.");
ITDebugLog(@"Getting current source.");
ITDebugLog(@"Getting current source.");
- fourcc = [ITSendAEWithString(@"'----':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'() } } }", 'core', 'getd', &savedPSN) int32Value];
+ fourcc = ([self isPlaying]) ? [ITSendAEWithString(@"'----':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'() } } }", 'core', 'getd', &savedPSN) int32Value] : 'kLib';
switch (fourcc) {
case 'kTun':
switch (fourcc) {
case 'kTun':
{
int temp1;
ITDebugLog(@"Getting current playlist index.");
{
int temp1;
ITDebugLog(@"Getting current playlist index.");
- temp1 = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pidx'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value];
+ temp1 = ([self isPlaying] ? [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pidx'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] : -1);
ITDebugLog(@"Getting current playlist index done.");
return temp1;
}
ITDebugLog(@"Getting current playlist index done.");
return temp1;
}
{
int temp1;
ITDebugLog(@"Getting current song index.");
{
int temp1;
ITDebugLog(@"Getting current song index.");
- temp1 = (([ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pcls'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] != 'prop') ? [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pidx'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] : -1);
+ temp1 = ([self isPlaying] ? [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pidx'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] : -1);
ITDebugLog(@"Getting current song index done.");
return temp1;
}
ITDebugLog(@"Getting current song index done.");
return temp1;
}
{
NSString *temp1;
ITDebugLog(@"Getting current song title.");
{
NSString *temp1;
ITDebugLog(@"Getting current song title.");
+ SInt32 result = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pcls'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value];
+
//If we're listening to the radio.
//If we're listening to the radio.
- if ([ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pcls'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] == 'cURT') {
+ if (result == 'cURT') {
NSString *bad = [NSString stringWithUTF8String:"浳湧"];
temp1 = [ITSendAEWithKey('pStT', 'core', 'getd', &savedPSN) stringValue];
if ([temp1 isEqualToString:bad]) {
temp1 = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) stringValue];
}
temp1 = [temp1 stringByAppendingString:@" (Stream)"];
NSString *bad = [NSString stringWithUTF8String:"浳湧"];
temp1 = [ITSendAEWithKey('pStT', 'core', 'getd', &savedPSN) stringValue];
if ([temp1 isEqualToString:bad]) {
temp1 = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) stringValue];
}
temp1 = [temp1 stringByAppendingString:@" (Stream)"];
+ } else if (result == 'prop') {
+ temp1 = nil;
+ } else {
temp1 = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) stringValue];
}
ITDebugLog(@"Getting current song title done.");
temp1 = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) stringValue];
}
ITDebugLog(@"Getting current song title done.");
- (NSImage *)currentSongAlbumArt
{
ITDebugLog(@"Getting current song album art.");
- (NSImage *)currentSongAlbumArt
{
ITDebugLog(@"Getting current song album art.");
- NSData *data = [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pPCT'), from:obj { form:'indx', want:type('cArt'), seld:long(1), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } } }", 'core', 'getd', &savedPSN) data];
+ NSData *data = ([self isPlaying]) ? [ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pPCT'), from:obj { form:'indx', want:type('cArt'), seld:long(1), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } } }", 'core', 'getd', &savedPSN) data] : nil;
ITDebugLog(@"Getting current song album art done.");
if (data) {
return [[[NSImage alloc] initWithData:data] autorelease];
ITDebugLog(@"Getting current song album art done.");
if (data) {
return [[[NSImage alloc] initWithData:data] autorelease];
{
float temp1;
ITDebugLog(@"Getting current song rating.");
{
float temp1;
ITDebugLog(@"Getting current song rating.");
- temp1 = ((float)[ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pRte'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] / 100.0);
- if ( [self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist ) { temp1 = -1.0; }
+ temp1 = (![self isPlaying] || ([self currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist)) ? -1.0 : ((float)[ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pRte'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] / 100.0);
ITDebugLog(@"Getting current song rating done.");
return temp1;
}
ITDebugLog(@"Getting current song rating done.");
return temp1;
}
+- (BOOL)isPlaying
+{
+ return ([ITSendAEWithString(@"'----':obj { form:'prop', want:type('prop'), seld:type('pcls'), from:obj { form:'prop', want:type('prop'), seld:type('pTrk'), from:'null'() } }", 'core', 'getd', &savedPSN) int32Value] != 'prop');
+}
+
- (ProcessSerialNumber)iTunesPSN
{
/*NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications];
- (ProcessSerialNumber)iTunesPSN
{
/*NSArray *apps = [[NSWorkspace sharedWorkspace] launchedApplications];