X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/d8546c318b2dc71d68753ca0c0abe89f07c166b3..13cf91d9f8bff4826b27829e441ad75efed02cdb:/MainController.m diff --git a/MainController.m b/MainController.m index 5b85436..9313f11 100755 --- a/MainController.m +++ b/MainController.m @@ -14,7 +14,6 @@ - (ITMTRemote *)loadRemote; - (void)timerUpdate; - (void)setLatestSongIdentifier:(NSString *)newIdentifier; -- (void)showCurrentTrackInfo; - (void)applicationLaunched:(NSNotification *)note; - (void)applicationTerminated:(NSNotification *)note; @end @@ -293,7 +292,7 @@ static MainController *sharedController; [statusItem setMenu:[menuController menu]]; } - if ( [self songChanged] && (timerUpdating != YES) ) { + if ( [self songChanged] && (timerUpdating != YES) && (playerRunningState == ITMTRemotePlayerRunning) ) { ITDebugLog(@"The song changed."); timerUpdating = YES; @@ -407,6 +406,7 @@ static MainController *sharedController; { ITDebugLog(@"Selecting playlist %i", index); NS_DURING + //[[self currentRemote] switchToPlaylistAtIndex:(index % 1000) ofSourceAtIndex:(index / 1000)]; [[self currentRemote] switchToPlaylistAtIndex:index]; NS_HANDLER [self networkError:localException]; @@ -500,6 +500,10 @@ static MainController *sharedController; - (ITMTRemote *)currentRemote { + if ([networkController isConnectedToServer] && ![[networkController networkObject] isValid]) { + [self networkError:nil]; + return nil; + } return currentRemote; } @@ -960,6 +964,12 @@ static MainController *sharedController; if (result == 1) { [[PreferencesController sharedPrefs] resetRemotePlayerTextFields]; currentRemote = [[[networkController networkObject] remote] retain]; + [refreshTimer invalidate]; + 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; @@ -992,7 +1002,7 @@ static MainController *sharedController; if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { ITDebugLog(@"Remote server found."); [timer invalidate]; - if (![networkController isConnectedToServer]) { + if (![networkController isServerOn] && ![networkController isConnectedToServer]) { [[StatusWindowController sharedController] showReconnectQueryWindow]; } } else { @@ -1003,8 +1013,7 @@ static MainController *sharedController; - (void)networkError:(NSException *)exception { ITDebugLog(@"Remote exception thrown: %@: %@", [exception name], [exception reason]); - NSLog(@"%@", [exception reason]); - if ([[exception name] isEqualToString:NSPortTimeoutException] && [networkController isConnectedToServer]) { + if ( ((exception == nil) || [[exception name] isEqualToString:NSPortTimeoutException]) && [networkController isConnectedToServer]) { NSRunCriticalAlertPanel(@"Remote MenuTunes Disconnected", @"The MenuTunes server you were connected to stopped responding or quit. MenuTunes will revert back to the local player.", @"OK", nil, nil); if ([self disconnectFromServer]) { [[PreferencesController sharedPrefs] resetRemotePlayerTextFields]; @@ -1064,12 +1073,23 @@ static MainController *sharedController; NS_DURING if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]]) { ITDebugLog(@"Remote application terminated."); + playerRunningState = ITMTRemotePlayerNotRunning; [[self currentRemote] halt]; [refreshTimer invalidate]; [refreshTimer release]; refreshTimer = nil; [self clearHotKeys]; - playerRunningState = ITMTRemotePlayerNotRunning; + + if ([df objectForKey:@"ShowPlayer"] != nil) { + ITHotKey *hotKey; + ITDebugLog(@"Setting up show player hot key."); + hotKey = [[ITHotKey alloc] init]; + [hotKey setName:@"ShowPlayer"]; + [hotKey setKeyCombo:[ITKeyCombo keyComboWithPlistRepresentation:[df objectForKey:@"ShowPlayer"]]]; + [hotKey setTarget:self]; + [hotKey setAction:@selector(showPlayer)]; + [[ITHotKeyCenter sharedCenter] registerHotKey:[hotKey autorelease]]; + } } NS_HANDLER [self networkError:localException];