X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/775df65cfdd7c0d32917a5b9b1ffb5923b1297d7..28a72418f8254017a166b9307da970e5dc63c7e2:/MenuController.m diff --git a/MenuController.m b/MenuController.m index 2bd03d1..b5d2c21 100755 --- a/MenuController.m +++ b/MenuController.m @@ -403,7 +403,6 @@ NS_DURING [[_eqMenu itemAtIndex:0] setState:[mtr equalizerEnabled] ? NSOnState : NSOffState]; [[_eqMenu itemAtIndex:([mtr currentEQPresetIndex] + 1)] setState:NSOnState]; - [[_eqMenu itemAtIndex:([mtr currentEQPresetIndex] - 1)] setState:NSOnState]; NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER @@ -492,7 +491,7 @@ return [menu autorelease]; } -- (void)rebuildSubmenus +- (BOOL)rebuildSubmenus { NSArray *menu = [[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"]; ITDebugLog(@"Rebuilding all of the submenus."); @@ -504,38 +503,48 @@ [[MainController sharedController] networkError:localException]; NS_ENDHANDLER ITDebugLog(@"Releasing old submenus."); + _continue = YES; ITDebugLog(@" - Rating menu"); [_ratingMenu release]; + _ratingMenu = nil; ITDebugLog(@" - Upcoming songs menu"); [_upcomingSongsMenu release]; + _upcomingSongsMenu = nil; ITDebugLog(@" - Playlists menu"); [_playlistsMenu release]; + _playlistsMenu = nil; ITDebugLog(@" - EQ menu"); [_eqMenu release]; + _eqMenu = nil; ITDebugLog(@"Beginning Rebuild of \"Song Rating\" submenu."); _ratingMenu = [self ratingMenu]; ITDebugLog(@"Beginning Rebuild of \"Upcoming Songs\" submenu."); _upcomingSongsMenu = [self upcomingSongsMenu]; - ITDebugLog(@"Beginning Rebuild of \"Playlists\" submenu."); - _playlistsMenu = [self playlistsMenu]; - ITDebugLog(@"Beginning Rebuild of \"EQ Presets\" submenu."); - _eqMenu = [self eqMenu]; + if (_continue) { + ITDebugLog(@"Beginning Rebuild of \"Playlists\" submenu."); + _playlistsMenu = [self playlistsMenu]; + } + if (_continue) { + ITDebugLog(@"Beginning Rebuild of \"EQ Presets\" submenu."); + _eqMenu = [self eqMenu]; + } - if ([menu containsObject:@"artists"]) { + if (_continue && [menu containsObject:@"artists"]) { ITDebugLog(@"Releasing artists menu"); [_artistsMenu release]; ITDebugLog(@"Beginning Rebuild of \"Artists\" submenu."); _artistsMenu = [self artistsMenu]; } - if ([menu containsObject:@"albums"]) { + if (_continue && [menu containsObject:@"albums"]) { ITDebugLog(@"Releasing albums menu"); [_albumsMenu release]; ITDebugLog(@"Beginning Rebuild of \"Albums\" submenu."); _albumsMenu = [self albumsMenu]; } ITDebugLog(@"Done rebuilding all of the submenus."); + return _continue; } - (NSMenu *)ratingMenu @@ -571,13 +580,17 @@ { NSMenu *upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""]; int numSongs = 0, numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"]; - NS_DURING numSongs = [[[MainController sharedController] currentRemote] numberOfSongsInPlaylistAtIndex:_currentPlaylist]; NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER + if (numSongs == -1) { + [upcomingSongsMenu release]; + return nil; + } + NS_DURING ITDebugLog(@"Building \"Upcoming Songs\" menu."); if (_currentPlaylist && !_playingRadio) { if (numSongs > 0) { @@ -606,7 +619,12 @@ } } ITDebugLog(@"Done Building \"Upcoming Songs\" menu."); - return upcomingSongsMenu; + NS_VALUERETURN(upcomingSongsMenu, NSMenu *); + NS_HANDLER + [upcomingSongsMenu release]; + _continue = NO; + NS_VALUERETURN(nil, NSMenu *); + NS_ENDHANDLER } /*- (NSMenu *)playlistsMenu @@ -663,6 +681,13 @@ NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER + + if (!playlists) { + [playlistsMenu release]; + return nil; + } + + NS_DURING ITDebugLog(@"Building \"Playlists\" menu."); { NSArray *curPlaylist = [playlists objectAtIndex:0]; @@ -715,6 +740,7 @@ } } 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]; @@ -722,12 +748,19 @@ } else if (source == ITMTRemoteLibrarySource && _currentPlaylist) { [[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState]; } + NS_HANDLER + NS_ENDHANDLER [indices release]; tempItem = [playlistsMenu addItemWithTitle:NSLocalizedString(@"refresh", @"Refresh") action:@selector(rebuildSubmenus) keyEquivalent:@""]; [tempItem setTarget:self]; [tempItem setImage:[NSImage imageNamed:@"ChasingArrow"]]; ITDebugLog(@"Done Building \"Playlists\" menu"); - return playlistsMenu; + NS_VALUERETURN(playlistsMenu, NSMenu *); + NS_HANDLER + [playlistsMenu release]; + _continue = NO; + NS_VALUERETURN(nil, NSMenu *); + NS_ENDHANDLER } - (NSMenu *)eqMenu @@ -748,11 +781,6 @@ tempItem = [eqMenu addItemWithTitle:@"Enabled" action:@selector(performEqualizerMenuAction:) keyEquivalent:@""]; [tempItem setTag:-1]; [tempItem setTarget:self]; - NS_DURING - [tempItem setState:[[[MainController sharedController] currentRemote] equalizerEnabled] ? NSOnState : NSOffState]; - NS_HANDLER - [[MainController sharedController] networkError:localException]; - NS_ENDHANDLER [eqMenu addItem:[NSMenuItem separatorItem]]; for (i = 0; i < [eqPresets count]; i++) { @@ -772,7 +800,7 @@ - (NSMenu *)artistsMenu { - NSMenu *artistsMenu = [[NSMenu alloc] initWithTitle:@""]; + NSMenu *artistsMenu = [[NSMenu alloc] initWithTitle:@"Artists"]; NSEnumerator *artistsEnumerator; NSString *nextArtist; id tempItem; @@ -781,8 +809,6 @@ artistsEnumerator = [[[[MainController sharedController] currentRemote] artists] objectEnumerator]; while ( (nextArtist = [artistsEnumerator nextObject]) ) { tempItem = [artistsMenu addItemWithTitle:nextArtist action:@selector(performBrowseMenuAction:) keyEquivalent:@""]; - [tempItem setRepresentedObject:nextArtist]; - [tempItem setTag:1]; [tempItem setTarget:self]; } NS_HANDLER @@ -794,7 +820,7 @@ - (NSMenu *)albumsMenu { - NSMenu *albumsMenu = [[NSMenu alloc] initWithTitle:@""]; + NSMenu *albumsMenu = [[NSMenu alloc] initWithTitle:@"Albums"]; NSEnumerator *albumsEnumerator; NSString *nextAlbum; id tempItem; @@ -803,8 +829,6 @@ albumsEnumerator = [[[[MainController sharedController] currentRemote] albums] objectEnumerator]; while ( (nextAlbum = [albumsEnumerator nextObject]) ) { tempItem = [albumsMenu addItemWithTitle:nextAlbum action:@selector(performBrowseMenuAction:) keyEquivalent:@""]; - [tempItem setRepresentedObject:nextAlbum]; - [tempItem setTag:2]; [tempItem setTarget:self]; } NS_HANDLER @@ -886,13 +910,13 @@ - (void)performBrowseMenuAction:(id)sender { - ITDebugLog(@"Browse action selected on item with object %@ and tag %i", [sender representedObject], [sender tag]); + ITDebugLog(@"Browse action selected on item named %@", [sender title]); /* ** 1 - Artist ** 2 - Album ** 3 - Genre? */ - [[MainController sharedController] makePlaylistWithTerm:[sender representedObject] ofType:[sender tag]]; + [[MainController sharedController] makePlaylistWithTerm:[sender title] ofType:(([[[sender menu] title] isEqualToString:@"Artists"]) ? 1 : 2)]; } - (void)updateMenu