Merge branch 'master' of git://github.com/ksuther/MenuTunes
[MenuTunes.git] / MenuController.m
index 50ffb98..6778abb 100755 (executable)
@@ -1,11 +1,3 @@
-//
-//  MenuController.m
-//  MenuTunes
-//
-//  Created by Joseph Spiros on Wed Apr 30 2003.
-//  Copyright (c) 2003 iThink Software. All rights reserved.
-//
-
 #import "MenuController.h"
 #import "MainController.h"
 #import "NetworkController.h"
@@ -63,7 +55,7 @@
     NS_HANDLER
         [[MainController sharedController] networkError:localException];
     NS_ENDHANDLER
-    
+       
     ITDebugLog(@"Reset menu if required.");
     
     //Kill the old submenu items
             [tempItem setTag:MTMenuAboutItem];
             [tempItem setTarget:self];
                } else if ([nextObject isEqualToString:@"quit"]) {
-            if ([[MainController sharedController] blingBling] == NO) {
-                ITDebugLog(@"Add \"Register MenuTunes...\" menu item.");
-                tempItem = [menu addItemWithTitle:NSLocalizedString(@"register", @"Register MenuTunes...") action:@selector(performMainMenuAction:) keyEquivalent:@""];
-                [tempItem setTag:MTMenuRegisterItem];
-                [tempItem setTarget:self];
-            }
             ITDebugLog(@"Add \"Quit\" menu item.");
             tempItem = [menu addItemWithTitle:NSLocalizedString(@"quit", @"Quit")
                     action:@selector(performMainMenuAction:)
                     keyEquivalent:@""];
             [tempItem setSubmenu:_upcomingSongsMenu];
             [tempItem setTag:2];
-            if (_playingRadio || !_currentPlaylist) {
+            if (_playingRadio || _currentPlaylist < 1) {
                 [tempItem setEnabled:NO];
             }
         } else if ([nextObject isEqualToString:@"artists"]) {
     tempItem = [menu addItemWithTitle:NSLocalizedString(@"preferences", @"Preferences...") action:@selector(performMainMenuAction:) keyEquivalent:@""];
     [tempItem setTag:MTMenuPreferencesItem];
     [tempItem setTarget:self];
-    if ([[MainController sharedController] blingBling] == NO) {
-        ITDebugLog(@"Add \"Register MenuTunes...\" menu item.");
-        tempItem = [menu addItemWithTitle:NSLocalizedString(@"register", @"Register MenuTunes...") action:@selector(performMainMenuAction:) keyEquivalent:@""];
-        [tempItem setTag:MTMenuRegisterItem];
-        [tempItem setTarget:self];
-    }
     ITDebugLog(@"Add \"Quit\" menu item.");
     tempItem = [menu addItemWithTitle:NSLocalizedString(@"quit", @"Quit") action:@selector(performMainMenuAction:) keyEquivalent:@""];
     [tempItem setTag:MTMenuQuitItem];
     if (_currentPlaylist && !_playingRadio) {
         if (numSongs > 0) {
             int i;
-            for (i = _currentTrack + 1; i <= _currentTrack + numSongsInAdvance; i++) {
-                if (i <= numSongs) {
+            for (i = _currentTrack + 1; i <= _currentTrack + numSongsInAdvance && i <= numSongs; i++) {
+                               BOOL enabled = YES;
+                               
+                               //Check if the song at this index is enabled for playback. If it isn't, skip over it
+                               NS_DURING
+                                       enabled = [[[MainController sharedController] currentRemote] songEnabledAtIndex:i];
+                               NS_HANDLER
+                                       [[MainController sharedController] networkError:localException];
+                               NS_ENDHANDLER
+                               
+                if (enabled) {
                     NSString *curSong = nil;
                     NS_DURING
                         curSong = [[[MainController sharedController] currentRemote] songTitleAtIndex:i];
                     [songItem setTag:i];
                     [songItem setTarget:self];
                 } else {
-                    break;
-                }
+                                       numSongsInAdvance++;
+                               }
             }
         }
         
                        [tempItem setTag:p + [nextNode index] + 1];
                        [tempItem setTarget:self];
                }
+               
+               PlaylistNode *root = node;
+               while ([root type] == ITMTPlaylistNode || [root type] == ITMTFolderNode) {
+                       root = [root parent];
+               }
+               
+               if ([root index] == [[[MainController sharedController] currentRemote] currentSourceIndex] && [nextNode index] == _currentPlaylist) {
+                       [tempItem setState:NSOnState];
+               }
        }
 }
 
         }
                
                //Add other sources as needed (shared music, iPods, CDs)
-        for (i = 2; i < [playlists count]; i++) {
+        for (i = [playlists count] - 1; i > 1 ; i--) {
             PlaylistNode *nextSource = [playlists objectAtIndex:i];
             if ([nextSource type] != ITMTRemoteRadioSource) {
                 NSString *name = [nextSource name];
             }
         }
     }
-    ITDebugLog(@"Checking the current source.");
        NS_DURING
        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 - 2] setState:NSOnState];
                }
        }
        NS_HANDLER
             ITDebugLog(@"Performing Menu Action: Quit");
             [[MainController sharedController] quitMenuTunes];
             break;
-        case MTMenuRegisterItem:
-            ITDebugLog(@"Performing Menu Action: Register");
-            [[MainController sharedController] blingNow];
-            break;
         default:
             ITDebugLog(@"Performing Menu Action: Unimplemented Menu Item OR Child-bearing Menu Item");
             break;