X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/f19e615a181cf260d69db226582b0ddcc0fc829c..68dce30ee215d5614aff29c67733f9d71cfd033a:/MainController.m diff --git a/MainController.m b/MainController.m index 4417228..8079f3b 100755 --- a/MainController.m +++ b/MainController.m @@ -89,9 +89,10 @@ static MainController *sharedController; if ([df boolForKey:@"enableSharing"]) { [self setServerStatus:YES]; } else if ([df boolForKey:@"useSharedPlayer"]) { - if ([self connectToServer] == 0) { + [self checkForRemoteServer:nil]; + /*if ([self connectToServer] == 0) { [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:YES]; - } + }*/ } //Setup for notification of the remote player launching or quitting @@ -107,7 +108,7 @@ static MainController *sharedController; name:NSWorkspaceDidLaunchApplicationNotification object:nil]; - if ( ! [df objectForKey:@"menu"] ) { // If this is nil, defaults have never been registered. + if (![df objectForKey:@"menu"]) { // If this is nil, defaults have never been registered. [[PreferencesController sharedPrefs] registerDefaults]; } @@ -392,7 +393,7 @@ static MainController *sharedController; } if ([networkController isConnectedToServer]) { - [statusItem setMenu:[menuController menu]]; + [statusItem setMenu:([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) ? [menuController menu] : [menuController menuForNoPlayer]]; } } @@ -533,20 +534,20 @@ static MainController *sharedController; - (void)showPlayer { ITDebugLog(@"Beginning show player."); - if ( ( playerRunningState == ITMTRemotePlayerRunning) ) { + //if ( ( playerRunningState == ITMTRemotePlayerRunning) ) { ITDebugLog(@"Showing player interface."); NS_DURING [[self currentRemote] showPrimaryInterface]; NS_HANDLER [self networkError:localException]; NS_ENDHANDLER - } else { + /*} else { ITDebugLog(@"Launching player."); NS_DURING NSString *path; if ( (path = [df stringForKey:@"CustomPlayerPath"]) ) { } else { - path = [[self currentRemote] playerFullName]; + pathITDebugLog(@"Showing player interface."); = [[self currentRemote] playerFullName]; } if (![[NSWorkspace sharedWorkspace] launchApplication:path]) { ITDebugLog(@"Error Launching Player"); @@ -554,7 +555,7 @@ static MainController *sharedController; NS_HANDLER [self networkError:localException]; NS_ENDHANDLER - } + }*/ ITDebugLog(@"Finished show player."); } @@ -1093,7 +1094,8 @@ static MainController *sharedController; currentRemote = [[[networkController networkObject] remote] retain]; [self setupHotKeys]; - playerRunningState = ITMTRemotePlayerRunning; + //playerRunningState = ITMTRemotePlayerRunning; + playerRunningState = [[self currentRemote] playerRunningState]; [refreshTimer invalidate]; refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5) @@ -1136,7 +1138,13 @@ static MainController *sharedController; - (void)checkForRemoteServer:(NSTimer *)timer { ITDebugLog(@"Checking for remote server."); - if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { + + //New code + [NSThread detachNewThreadSelector:@selector(runRemoteServerCheck:) toTarget:self withObject:nil]; + //[timer invalidate]; + // + + /*if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { ITDebugLog(@"Remote server found."); [timer invalidate]; if (![networkController isServerOn] && ![networkController isConnectedToServer]) { @@ -1144,7 +1152,33 @@ static MainController *sharedController; } } else { ITDebugLog(@"Remote server not found."); + }*/ +} + +- (void)runRemoteServerCheck:(id)sender +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + ITDebugLog(@"Remote server check running."); + if ([networkController checkForServerAtHost:[df stringForKey:@"sharedPlayerHost"]]) { + ITDebugLog(@"Remote server found."); + [self performSelectorOnMainThread:@selector(remoteServerFound:) withObject:nil waitUntilDone:NO]; + } else { + ITDebugLog(@"Remote server not found."); + [self performSelectorOnMainThread:@selector(remoteServerNotFound:) withObject:nil waitUntilDone:NO]; } + [pool release]; +} + +- (void)remoteServerFound:(id)sender +{ + if (![networkController isServerOn] && ![networkController isConnectedToServer]) { + [[StatusWindowController sharedController] showReconnectQueryWindow]; + } +} + +- (void)remoteServerNotFound:(id)sender +{ + [NSTimer scheduledTimerWithTimeInterval:45 target:self selector:@selector(checkForRemoteServer:) userInfo:nil repeats:NO]; } - (void)networkError:(NSException *)exception @@ -1186,7 +1220,7 @@ static MainController *sharedController; - (void)applicationLaunched:(NSNotification *)note { NS_DURING - if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]]) { + if (!note || ([[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]] && ![[NetworkController sharedController] isConnectedToServer])) { ITDebugLog(@"Remote application launched."); playerRunningState = ITMTRemotePlayerRunning; [[self currentRemote] begin]; @@ -1208,7 +1242,7 @@ static MainController *sharedController; - (void)applicationTerminated:(NSNotification *)note { NS_DURING - if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]]) { + if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[[self currentRemote] playerFullName]] && ![[NetworkController sharedController] isConnectedToServer]) { ITDebugLog(@"Remote application terminated."); playerRunningState = ITMTRemotePlayerNotRunning; [[self currentRemote] halt];