From a9675e29f56fa57c2235b051669ea435bf8d0980 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Sat, 21 Feb 2004 13:49:21 +0000 Subject: [PATCH] Hopefully fixed some more evilness with the multisource playlists. There might be a crash hidden in there somewhere, but I fixed a problem with the menu actually building, which may have been causing the crash. --- MenuController.m | 19 +++++++++++++------ iTunesRemote.m | 4 +++- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/MenuController.m b/MenuController.m index 4b4ee50..fe7c315 100755 --- a/MenuController.m +++ b/MenuController.m @@ -573,6 +573,7 @@ id tempItem; ITMTRemotePlayerSource source = [[[MainController sharedController] currentRemote] currentSource]; int i, j; + NSMutableArray *indices = [[NSMutableArray alloc] init]; NS_DURING playlists = [[[MainController sharedController] currentRemote] playlists]; NS_HANDLER @@ -583,13 +584,16 @@ NSArray *curPlaylist = [playlists objectAtIndex:0]; NSString *name = [curPlaylist objectAtIndex:0]; ITDebugLog(@"Adding main source: %@", name); - for (i = 2; i < [curPlaylist count]; i++) { + for (i = 3; i < [curPlaylist count]; i++) { ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:i]); tempItem = [playlistsMenu addItemWithTitle:[curPlaylist objectAtIndex:i] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""]; - [tempItem setTag:i]; + [tempItem setTag:i - 1]; [tempItem setTarget:self]; } + ITDebugLog(@"Adding index to the index array."); + [indices addObject:[curPlaylist objectAtIndex:2]]; } + [indices addObject:[[playlists objectAtIndex:1] objectAtIndex:2]]; if ( (source == ITMTRemoteRadioSource) || ([playlists count] - 2 > 0) ) { [playlistsMenu addItem:[NSMenuItem separatorItem]]; } @@ -614,23 +618,26 @@ if ( ([[curPlaylist objectAtIndex:1] intValue] == ITMTRemoteiPodSource) && [self iPodWithNameAutomaticallyUpdates:name] ) { ITDebugLog(@"Invalid iPod source."); } else { - for (j = 2; j < [curPlaylist count]; j++) { + for (j = 3; j < [curPlaylist count]; j++) { ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:j]); tempItem = [submenu addItemWithTitle:[curPlaylist objectAtIndex:j] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""]; - [tempItem setTag:(i * 1000) + j]; + [tempItem setTag:(i * 1000) + j - 1]; [tempItem setTarget:self]; } [[playlistsMenu addItemWithTitle:name action:NULL keyEquivalent:@""] setSubmenu:[submenu autorelease]]; } + ITDebugLog(@"Adding index to the index array."); + [indices addObject:[curPlaylist objectAtIndex:2]]; } - + ITDebugLog(@"Checking the current source."); if ( (source == ITMTRemoteSharedLibrarySource) || (source == ITMTRemoteiPodSource) || (source == ITMTRemoteGenericDeviceSource) || (source == ITMTRemoteCDSource) ){ - tempItem = [playlistsMenu itemAtIndex:(int)[[[MainController sharedController] currentRemote] currentSourceIndex] + [playlistsMenu numberOfItems] - 5]; + tempItem = [playlistsMenu itemAtIndex:[indices indexOfObject:[NSNumber numberWithInt:[[[MainController sharedController] currentRemote] currentSourceIndex]]] + [playlistsMenu numberOfItems] - 3]; [tempItem setState:NSOnState]; [[[tempItem submenu] itemAtIndex:_currentPlaylist - 1] setState:NSOnState]; } else if (source == ITMTRemoteLibrarySource && _currentPlaylist) { [[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState]; } + [indices release]; ITDebugLog(@"Done Building \"Playlists\" menu"); return playlistsMenu; } diff --git a/iTunesRemote.m b/iTunesRemote.m index add1cde..d11a29a 100755 --- a/iTunesRemote.m +++ b/iTunesRemote.m @@ -166,6 +166,7 @@ const signed long numPlaylists = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:[NSString stringWithFormat:@"kocl:type('cPly'), '----':obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() }",k] eventClass:@"core" eventID:@"cnte" appPSN:savedPSN]; unsigned long fourcc = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pKnd'), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } }",k] eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; NSString *sourceName = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } }",k] eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; + unsigned long index = [[ITAppleEventCenter sharedCenter] sendAEWithSendStringForNumber:[NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pidx'), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } }",k] eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; unsigned long class; if (sourceName) { NSMutableArray *aSource = [[NSMutableArray alloc] init]; @@ -193,8 +194,9 @@ class = ITMTRemoteLibrarySource; break; } - ITDebugLog(@"Adding source %@ of type %i", sourceName, class); + ITDebugLog(@"Adding source %@ of type %i at index %i", sourceName, class, index); [aSource addObject:[NSNumber numberWithInt:class]]; + [aSource addObject:[NSNumber numberWithInt:index]]; for (i = 1; i <= numPlaylists; i++) { NSString *sendStr = [NSString stringWithFormat:@"'----':obj { form:'prop', want:type('prop'), seld:type('pnam'), from:obj { form:'indx', want:type('cPly'), seld:long(%u), from:obj { form:'indx', want:type('cSrc'), seld:long(%u), from:() } } }",i,k]; NSString *theObj = [[ITAppleEventCenter sharedCenter] sendAEWithSendString:sendStr eventClass:@"core" eventID:@"getd" appPSN:savedPSN]; -- 2.20.1