X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/8dbd42fb72d80c522809b1a8aeae73ab30dd6c90..865ed626fce033da225a4a93646ad185f72c74ff:/MenuController.m diff --git a/MenuController.m b/MenuController.m index e65cc1d..4ceb31f 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,50 +491,62 @@ return [menu autorelease]; } -- (void)rebuildSubmenus +- (BOOL)rebuildSubmenus { NSArray *menu = [[NSUserDefaults standardUserDefaults] arrayForKey:@"menu"]; ITDebugLog(@"Rebuilding all of the submenus."); NS_DURING - _currentPlaylist = [[[MainController sharedController] currentRemote] currentPlaylistIndex]; - _currentTrack = [[[MainController sharedController] currentRemote] currentSongIndex]; + _currentTrack = [[[MainController sharedController] currentRemote] currentSongIndex]; + if (_currentTrack > -1) { + _currentPlaylist = [[[MainController sharedController] currentRemote] currentPlaylistIndex]; + } _playingRadio = ([[[MainController sharedController] currentRemote] currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist); NS_HANDLER [[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 @@ -569,15 +580,22 @@ - (NSMenu *)upcomingSongsMenu { - NSMenu *upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""]; + NSMenu *upcomingSongsMenu; int numSongs = 0, numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"]; - + if (_currentTrack == -1) { + return nil; + } NS_DURING numSongs = [[[MainController sharedController] currentRemote] numberOfSongsInPlaylistAtIndex:_currentPlaylist]; NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER + if (numSongs == -1) { + return nil; + } + upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""]; + NS_DURING ITDebugLog(@"Building \"Upcoming Songs\" menu."); if (_currentPlaylist && !_playingRadio) { if (numSongs > 0) { @@ -606,7 +624,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 +686,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 +745,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 +753,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 +786,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++) {