Added support for attributed strings, which allows us to have non-sucky stars in...
[MenuTunes.git] / MainController.m
index 2a1e7dc..d185d83 100755 (executable)
@@ -98,11 +98,32 @@ static MainController *sharedController;
 
 - (void)applicationDidFinishLaunching:(NSNotification *)note
 {
+       NSString *iTunesPath = [df stringForKey:@"CustomPlayerPath"];
+       NSDictionary *iTunesInfoPlist;
+       float iTunesVersion;
+       
     //Turn on debug mode if needed
-    if ([df boolForKey:@"ITDebugMode"]) {
+       /*if ((GetCurrentKeyModifiers() & (controlKey | rightControlKey)) != 0)
+    if ((GetCurrentKeyModifiers() & (optionKey | rightOptionKey)) != 0)
+    if ((GetCurrentKeyModifiers() & (shiftKey | rightShiftKey)) != 0)*/
+    if ([df boolForKey:@"ITDebugMode"] || ((GetCurrentKeyModifiers() & (controlKey | rightControlKey)) != 0)) {
         SetITDebugMode(YES);
+               [[StatusWindowController sharedController] showDebugModeEnabledWindow];
     }
-    
+
+       //Check if iTunes 4.7 or later is installed     
+       if (!iTunesPath) {
+               iTunesPath = [[NSWorkspace sharedWorkspace] fullPathForApplication:@"iTunes.app"];
+       }
+       iTunesInfoPlist = [[NSBundle bundleWithPath:iTunesPath] infoDictionary];
+       iTunesVersion = [[iTunesInfoPlist objectForKey:@"CFBundleVersion"] floatValue];
+       ITDebugLog(@"iTunes version found: %f.", iTunesVersion);
+       if (iTunesVersion >= 4.7) {
+               _needsPolling = NO;
+       } else {
+               _needsPolling = YES;
+       }
+       
     if (([df integerForKey:@"appVersion"] < 1200) && ([df integerForKey:@"SongsInAdvance"] > 0)) {
         [df removePersistentDomainForName:@"com.ithinksw.menutunes"];
         [df synchronize];
@@ -189,13 +210,6 @@ static MainController *sharedController;
        _open = YES;
 }
 
-- (void)applicationDidBecomeActive:(NSNotification *)note
-{
-       if (_open && !blinged && ![NSApp mainWindow] && ![[StatusWindow sharedWindow] isVisible]) {
-               [[MainController sharedController] showPreferences];
-       }
-}
-
 - (ITMTRemote *)loadRemote
 {
     NSString *folderPath = [[NSBundle mainBundle] builtInPlugInsPath];
@@ -308,7 +322,7 @@ static MainController *sharedController;
         if (blinged) {
             [statusItem setEnabled:YES];
             [[ITHotKeyCenter sharedCenter] setEnabled:YES];
-            if (![refreshTimer isValid]) {
+            if (_needsPolling && ![refreshTimer isValid]) {
                 [refreshTimer release];
                 refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
                              target:self
@@ -388,14 +402,12 @@ static MainController *sharedController;
        if (refreshTimer && identifier == nil) {
                if ([statusItem isEnabled]) {
                        [statusItem setToolTip:@"iTunes not responding."];
-                       [[ITHotKeyCenter sharedCenter] setEnabled:NO];
                }
                [statusItem setEnabled:NO];
                return;
        } else if (![statusItem isEnabled]) {
                [statusItem setEnabled:YES];
                [statusItem setToolTip:_toolTip];
-               [[ITHotKeyCenter sharedCenter] setEnabled:YES];
                return;
        }
        
@@ -438,7 +450,7 @@ static MainController *sharedController;
                                        } else if (title) {
                                                _toolTip = title;
                                        } else {
-                                               _toolTip = @"No Song Playing";
+                                               _toolTip = NSLocalizedString(@"noSongPlaying", @"No song is playing.");
                                        }
                                        [statusItem setToolTip:_toolTip];
                                } else {
@@ -464,20 +476,18 @@ static MainController *sharedController;
        if (([[self currentRemote] playerStateUniqueIdentifier] == nil) && playerRunningState == ITMTRemotePlayerRunning) {
                if (refreshTimer) {
                        if ([statusItem isEnabled]) {
-                               [statusItem setToolTip:@"iTunes not responding."];
-                               [[ITHotKeyCenter sharedCenter] setEnabled:NO];
+                               [statusItem setToolTip:NSLocalizedString(@"iTunesNotResponding", @"iTunes is not responding.")];
                        }
                        [statusItem setEnabled:NO];
                } else {
                        NSMenu *menu = [[NSMenu alloc] init];
-                       [menu addItemWithTitle:@"iTunes Not Responding" action:nil keyEquivalent:@""];
+                       [menu addItemWithTitle:NSLocalizedString(@"iTunesNotResponding", @"iTunes is not responding.") action:nil keyEquivalent:@""];
                        [statusItem setMenu:[menu autorelease]];
                }
                return;
        } else if (![statusItem isEnabled]) {
                [statusItem setEnabled:YES];
                [statusItem setToolTip:_toolTip];
-               [[ITHotKeyCenter sharedCenter] setEnabled:YES];
                return;
        }
        
@@ -500,12 +510,12 @@ static MainController *sharedController;
 - (void)trackChanged:(NSNotification *)note
 {
        //If we're running the timer, shut it off since we don't need it!
-       if (refreshTimer && [refreshTimer isValid]) {
+       /*if (refreshTimer && [refreshTimer isValid]) {
                ITDebugLog(@"Invalidating refresh timer.");
                [refreshTimer invalidate];
                [refreshTimer release];
                refreshTimer = nil;
-       }
+       }*/
        
        if (![self songChanged]) {
                return;
@@ -554,7 +564,7 @@ static MainController *sharedController;
                                } else if (title) {
                                        _toolTip = title;
                                } else {
-                                       _toolTip = @"No Song Playing";
+                                       _toolTip = NSLocalizedString(@"noSongPlaying", @"No song is playing.");;
                                }
                                [statusItem setToolTip:_toolTip];
                        } else {
@@ -1003,7 +1013,7 @@ static MainController *sharedController;
     NSImage                *art         = nil;
     int                     rating      = -1;
     int                     playCount   = -1;
-    
+       
     ITDebugLog(@"Showing track info status window.");
     
     NS_DURING
@@ -1355,14 +1365,16 @@ static MainController *sharedController;
         [self setupHotKeys];
         //playerRunningState = ITMTRemotePlayerRunning;
         playerRunningState = [[self currentRemote] playerRunningState];
-               if (refreshTimer) {
-                       [refreshTimer invalidate];
+               if (_needsPolling) {
+                       if (refreshTimer) {
+                               [refreshTimer invalidate];
+                       }
+                       refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
+                                                                        target:self
+                                                                        selector:@selector(timerUpdate)
+                                                                        userInfo:nil
+                                                                        repeats:YES] retain];
                }
-        refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
-                                target:self
-                                selector:@selector(timerUpdate)
-                                userInfo:nil
-                                repeats:YES] retain];
         [self timerUpdate];
         ITDebugLog(@"Connection successful.");
         return 1;
@@ -1498,11 +1510,13 @@ static MainController *sharedController;
             [[self currentRemote] begin];
             [self setLatestSongIdentifier:@""];
             [self timerUpdate];
-            refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
-                                target:self
-                                selector:@selector(timerUpdate)
-                                userInfo:nil
-                                repeats:YES] retain];
+                       if (_needsPolling) {
+                               refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5)
+                                                                       target:self
+                                                                       selector:@selector(timerUpdate)
+                                                                       userInfo:nil
+                                                                       repeats:YES] retain];
+                       }
             //[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil];
                        if (![df boolForKey:@"UsePollingOnly"]) {
                                [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(trackChanged:) name:@"ITMTTrackChanged" object:nil];
@@ -1524,7 +1538,7 @@ static MainController *sharedController;
             [refreshTimer invalidate];
             [refreshTimer release];
             refreshTimer = nil;
-                       [[NSNotificationCenter defaultCenter] removeObserver:self];
+                       [[NSNotificationCenter defaultCenter] removeObserver:self name:@"ITMTTrackChanged" object:nil];
                        [statusItem setEnabled:YES];
                        [statusItem setToolTip:@"iTunes not running."];
             [self clearHotKeys];
@@ -1560,6 +1574,12 @@ static MainController *sharedController;
     [[NSStatusBar systemStatusBar] removeStatusItem:statusItem];
 }
 
+- (void)applicationDidBecomeActive:(NSNotification *)note
+{
+       if (_open && !blinged && ![NSApp mainWindow] && ([[StatusWindow sharedWindow] exitMode] == ITTransientStatusWindowExitAfterDelay)) {
+               [[MainController sharedController] showPreferences];
+       }
+}
 
 /*************************************************************************/
 #pragma mark -