Cache the currentRemote when building the menu. Does not actually speed it up, but...
[MenuTunes.git] / MenuController.m
index a38ec5b..0190406 100755 (executable)
@@ -8,6 +8,7 @@
 
 #import "MenuController.h"
 #import "MainController.h"
+#import "NetworkController.h"
 #import "ITMTRemote.h"
 #import <ITFoundation/ITDebug.h>
 #import <ITKit/ITHotKeyCenter.h>
     NSEnumerator *itemEnum;
     ITHotKey *hotKey;
     NSArray *hotKeys = [[ITHotKeyCenter sharedCenter] allHotKeys];
-    int currentSongRating;
+    ITMTRemote *mtr = [[MainController sharedController] currentRemote];
+    int currentSongRating = 0;
     
     //Get the information
     NS_DURING
-        _currentPlaylist = [[[MainController sharedController] currentRemote] currentPlaylistIndex];
-        _playingRadio = ([[[MainController sharedController] currentRemote] currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist);
-        currentSongRating = ( [[[MainController sharedController] currentRemote] currentSongRating] != -1 );
+        _currentPlaylist = [mtr currentPlaylistIndex];
+        _playingRadio = ([mtr currentPlaylistClass] == ITMTRemotePlayerRadioPlaylist);
+        currentSongRating = ( [mtr currentSongRating] != -1 );
     NS_HANDLER
         [[MainController sharedController] networkError:localException];
     NS_ENDHANDLER
             
             ITDebugLog(@"Set \"Play\"/\"Pause\" menu item's title to correct state.");
             NS_DURING
-                switch ([[[MainController sharedController] currentRemote] playerPlayingState]) {
+                switch ([mtr playerPlayingState]) {
                     case ITMTRemotePlayerPlaying:
                         [tempItem setTitle:NSLocalizedString(@"pause", @"Pause")];
                     break;
             NS_DURING
                 tempItem = [menu addItemWithTitle:[NSString stringWithFormat:@"%@ %@",
                                 NSLocalizedString(@"show", @"Show"),
-                                    [[[MainController sharedController] currentRemote] playerSimpleName]]
+                                    [mtr playerSimpleName]]
                                 action:@selector(performMainMenuAction:)
                                 keyEquivalent:@""];
             NS_HANDLER
             ITDebugLog(@"Check to see if a Track is playing...");
             //Handle playing radio too
             if (_currentPlaylist) {
-                NSString *title;
+                NSString *title = nil;
                 NS_DURING
-                    title = [[[MainController sharedController] currentRemote] currentSongTitle];
+                    title = [mtr currentSongTitle];
                 NS_HANDLER
                     [[MainController sharedController] networkError:localException];
                 NS_ENDHANDLER
                 
                 if (!_playingRadio) {
                     if ([defaults boolForKey:@"showAlbum"]) {
-                        NSString *curAlbum;
+                        NSString *curAlbum = nil;
                         NS_DURING
-                            curAlbum = [[[MainController sharedController] currentRemote] currentSongAlbum];
+                            curAlbum = [mtr currentSongAlbum];
                         NS_HANDLER
                             [[MainController sharedController] networkError:localException];
                         NS_ENDHANDLER
                     }
                     
                     if ([defaults boolForKey:@"showArtist"]) {
-                        NSString *curArtist;
+                        NSString *curArtist = nil;
                         NS_DURING
-                            curArtist = [[[MainController sharedController] currentRemote] currentSongArtist];
+                            curArtist = [mtr currentSongArtist];
                         NS_HANDLER
                             [[MainController sharedController] networkError:localException];
                         NS_ENDHANDLER
                     }
                     
                     if ([defaults boolForKey:@"showComposer"]) {
-                        NSString *curComposer;
+                        NSString *curComposer = nil;
                         NS_DURING
-                            curComposer = [[[MainController sharedController] currentRemote] currentSongComposer];
+                            curComposer = [mtr currentSongComposer];
                         NS_HANDLER
                             [[MainController sharedController] networkError:localException];
                         NS_ENDHANDLER
                     }
                     
                     if ([defaults boolForKey:@"showTrackNumber"]) {
-                        int track;
+                        int track = 0;
                         NS_DURING
-                            track = [[[MainController sharedController] currentRemote] currentSongTrack];
+                            track = [mtr currentSongTrack];
                         NS_HANDLER
                             [[MainController sharedController] networkError:localException];
                         NS_ENDHANDLER
                 }
                 
                 NS_DURING
-                    if ([defaults boolForKey:@"showTime"] && ( ([[[MainController sharedController] currentRemote] currentSongElapsed] != nil) || ([[[MainController sharedController] currentRemote] currentSongLength] != nil) )) {
-                        ITDebugLog(@"Add Track Elapsed (\"%@/%@\") menu item.", [[[MainController sharedController] currentRemote] currentSongElapsed], [[[MainController sharedController] currentRemote] currentSongLength]);
-                        [menu indentItem:[menu addItemWithTitle:[NSString stringWithFormat:@"%@/%@", [[[MainController sharedController] currentRemote] currentSongElapsed], [[[MainController sharedController] currentRemote] currentSongLength]] action:nil keyEquivalent:@""]];
+                    if ([defaults boolForKey:@"showTime"] && ( ([mtr currentSongElapsed] != nil) || ([mtr currentSongLength] != nil) )) {
+                        ITDebugLog(@"Add Track Elapsed (\"%@/%@\") menu item.", [mtr currentSongElapsed], [mtr currentSongLength]);
+                        [menu indentItem:[menu addItemWithTitle:[NSString stringWithFormat:@"%@/%@", [mtr currentSongElapsed], [mtr currentSongLength]] action:nil keyEquivalent:@""]];
                     }
                 NS_HANDLER
                     [[MainController sharedController] networkError:localException];
                 
                 if (!_playingRadio) {
                     NS_DURING
-                        if ([defaults boolForKey:@"showTrackRating"] && ( [[[MainController sharedController] currentRemote] currentSongRating] != -1.0 )) {
+                        if ([defaults boolForKey:@"showTrackRating"] && ( [mtr currentSongRating] != -1.0 )) {
                             NSString *string = nil;
-                            switch ((int)([[[MainController sharedController] currentRemote] currentSongRating] * 5)) {
+                            switch ((int)([mtr currentSongRating] * 5)) {
                                 case 0:
                                     string = [NSString stringWithUTF8String:"☆☆☆☆☆"];
                                 break;
                     NS_HANDLER
                         [[MainController sharedController] networkError:localException];
                     NS_ENDHANDLER
+                    
+                    /*if ([tempItem respondsToSelector:@selector(setAttributedTitle:)] && [defaults boolForKey:@"showAlbumArtwork"] && ![[NetworkController sharedController] isConnectedToServer]) {
+                        NSImage *image = [mtr currentSongAlbumArt];
+                        if (image) {
+                            NSSize oldSize, newSize;
+                            oldSize = [image size];
+                            if (oldSize.width > oldSize.height) newSize = NSMakeSize(110,oldSize.height * (110.0f / oldSize.width));
+                            else newSize = NSMakeSize(oldSize.width * (110.0f / oldSize.height),110);
+                            image = [[[[NSImage alloc] initWithData:[image TIFFRepresentation]] autorelease] imageScaledSmoothlyToSize:newSize];
+                            
+                            tempItem = [menu addItemWithTitle:@"" action:nil keyEquivalent:@""];
+                            NSTextAttachment *attachment = [[[NSTextAttachment alloc] init] autorelease];
+                            [[attachment attachmentCell] setImage:image];
+                            NSAttributedString *attrString = [NSAttributedString attributedStringWithAttachment:attachment];
+                            [tempItem setAttributedTitle:attrString];
+                        }
+                    }*/
                 }
             } else {
                 ITDebugLog(@"No Track is Playing, Add \"No Song\" menu item.");
                 [tempItem setState:NSOffState];
             }
             NS_DURING
-                [[_eqMenu itemAtIndex:([[[MainController sharedController] currentRemote] currentEQPresetIndex] - 1)] setState:NSOnState];
+                [[_eqMenu itemAtIndex:([mtr currentEQPresetIndex] - 1)] setState:NSOnState];
             NS_HANDLER
                 [[MainController sharedController] networkError:localException];
             NS_ENDHANDLER
                 }
                 
                 NS_DURING
-                    [[_ratingMenu itemAtIndex:([[[MainController sharedController] currentRemote] currentSongRating] * 5)] setState:NSOnState];
+                    [[_ratingMenu itemAtIndex:([mtr currentSongRating] * 5)] setState:NSOnState];
                 NS_HANDLER
                     [[MainController sharedController] networkError:localException];
                 NS_ENDHANDLER
 - (NSMenu *)menuForNoPlayer
 {
     NSMenu *menu = [[NSMenu alloc] initWithTitle:@""];
-    id <NSMenuItem> tempItem;
+    id <NSMenuItem> tempItem = nil;
     ITDebugLog(@"Creating menu for when player isn't running.");
     NS_DURING
         ITDebugLog(@"Add \"Open %@\" menu item.", [[[MainController sharedController] currentRemote] playerSimpleName]);
         [[MainController sharedController] networkError:localException];
     NS_ENDHANDLER
     ITDebugLog(@"Releasing old submenus.");
+    ITDebugLog(@" - Rating menu");
     [_ratingMenu release];
+    ITDebugLog(@" - Upcoming songs menu");
     [_upcomingSongsMenu release];
+    ITDebugLog(@" - Playlists menu");
     [_playlistsMenu release];
+    ITDebugLog(@" - EQ menu");
     [_eqMenu release];
     ITDebugLog(@"Beginning Rebuild of \"Song Rating\" submenu.");
     _ratingMenu = [self ratingMenu];
 - (NSMenu *)upcomingSongsMenu
 {
     NSMenu *upcomingSongsMenu = [[NSMenu alloc] initWithTitle:@""];
-    int numSongs, numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"];
+    int numSongs = 0, numSongsInAdvance = [[NSUserDefaults standardUserDefaults] integerForKey:@"SongsInAdvance"];
     
     NS_DURING
         numSongs = [[[MainController sharedController] currentRemote] numberOfSongsInPlaylistAtIndex:_currentPlaylist];
             int i;
             for (i = _currentTrack + 1; i <= _currentTrack + numSongsInAdvance; i++) {
                 if (i <= numSongs) {
-                    NSString *curSong;
+                    NSString *curSong = nil;
                     NS_DURING
                         curSong = [[[MainController sharedController] currentRemote] songTitleAtIndex:i];
                     NS_HANDLER
 - (NSMenu *)playlistsMenu
 {
     NSMenu *playlistsMenu = [[NSMenu alloc] initWithTitle:@""];
-    NSArray *playlists;
+    NSArray *playlists = nil;
     id <NSMenuItem> tempItem;
     ITMTRemotePlayerSource source = [[[MainController sharedController] currentRemote] currentSource];
     int i, j;
 - (NSMenu *)eqMenu
 {
     NSMenu *eqMenu = [[NSMenu alloc] initWithTitle:@""];
-    NSArray *eqPresets;
+    NSArray *eqPresets = nil;
     id <NSMenuItem> tempItem;
     int i;