X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/50485da2e6ae0642e4dfb55ef4c0556ed6ef2a80..dc685d1d1cffcfd6bb95dd948c30f1dc315919e0:/MainController.m diff --git a/MainController.m b/MainController.m index 940766c..c4fd253 100755 --- a/MainController.m +++ b/MainController.m @@ -10,11 +10,7 @@ #import "StatusWindowController.h" #import "StatusItemHack.h" -@interface NSImage (WeeAdditions) -- (NSImage *)imageScaledSmoothlyToSize:(NSSize)scaledSize; -@end - -@implementation NSImage (WeeAdditions) +@implementation NSImage (SmoothAdditions) - (NSImage *)imageScaledSmoothlyToSize:(NSSize)scaledSize { @@ -264,7 +260,7 @@ static MainController *sharedController; [self setupHotKeys]; if (![refreshTimer isValid]) { [refreshTimer release]; - refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.5 + refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5) target:self selector:@selector(timerUpdate) userInfo:nil @@ -330,17 +326,14 @@ static MainController *sharedController; - (void)setLatestSongIdentifier:(NSString *)newIdentifier { - ITDebugLog(@"Setting latest song identifier to %@", newIdentifier); + ITDebugLog(@"Setting latest song identifier:"); + ITDebugLog(@" - Identifier: %@", newIdentifier); [_latestSongIdentifier autorelease]; - _latestSongIdentifier = [newIdentifier copy]; + _latestSongIdentifier = [newIdentifier retain]; } - (void)timerUpdate { - if ([networkController isConnectedToServer]) { - [statusItem setMenu:[menuController menu]]; - } - if ( [self songChanged] && (timerUpdating != YES) && (playerRunningState == ITMTRemotePlayerRunning) ) { ITDebugLog(@"The song changed."); @@ -352,7 +345,7 @@ static MainController *sharedController; while ( (nextScript = [scriptsEnum nextObject]) ) { NSDictionary *error; NSAppleScript *currentScript = [[NSAppleScript alloc] initWithContentsOfURL:[NSURL fileURLWithPath:[[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"] stringByAppendingPathComponent:nextScript]] error:&error]; - NSLog(@"Running script: %@", nextScript); + ITDebugLog(@"Running script: %@", nextScript); if (!currentScript || ![currentScript executeAndReturnError:nil]) { ITDebugLog(@"Error running script %@.", nextScript); } @@ -361,6 +354,7 @@ static MainController *sharedController; } timerUpdating = YES; + [statusItem setEnabled:NO]; NS_DURING latestPlaylistClass = [[self currentRemote] currentPlaylistClass]; @@ -394,6 +388,11 @@ static MainController *sharedController; NS_ENDHANDLER timerUpdating = NO; + [statusItem setEnabled:YES]; + } + + if ([networkController isConnectedToServer]) { + [statusItem setMenu:([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) ? [menuController menu] : [menuController menuForNoPlayer]]; } } @@ -534,14 +533,14 @@ 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; @@ -555,7 +554,7 @@ static MainController *sharedController; NS_HANDLER [self networkError:localException]; NS_ENDHANDLER - } + }*/ ITDebugLog(@"Finished show player."); } @@ -632,7 +631,7 @@ static MainController *sharedController; ITHotKey *hotKey; ITDebugLog(@"Setting up hot keys."); - if (playerRunningState == ITMTRemotePlayerNotRunning) { + if (playerRunningState == ITMTRemotePlayerNotRunning && ![[NetworkController sharedController] isConnectedToServer]) { return; } @@ -770,6 +769,8 @@ static MainController *sharedController; NSImage *art = nil; int rating = -1; + ITDebugLog(@"Showing track info status window."); + NS_DURING source = [[self currentRemote] currentSource]; title = [[self currentRemote] currentSongTitle]; @@ -777,8 +778,6 @@ static MainController *sharedController; [self networkError:localException]; NS_ENDHANDLER - ITDebugLog(@"Showing track info status window."); - if ( title ) { if ( [df boolForKey:@"showAlbum"] ) { @@ -863,6 +862,7 @@ static MainController *sharedController; } else { title = NSLocalizedString(@"noSongPlaying", @"No song is playing."); } + ITDebugLog(@"Showing current track info status window."); [statusWindowController showSongInfoWindowWithSource:source title:title album:album @@ -1091,6 +1091,11 @@ static MainController *sharedController; if (result == 1) { [[PreferencesController sharedPrefs] resetRemotePlayerTextFields]; currentRemote = [[[networkController networkObject] remote] retain]; + + [self setupHotKeys]; + //playerRunningState = ITMTRemotePlayerRunning; + playerRunningState = [[self currentRemote] playerRunningState]; + [refreshTimer invalidate]; refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:([networkController isConnectedToServer] ? 10.0 : 0.5) target:self @@ -1119,6 +1124,12 @@ static MainController *sharedController; [currentRemote release]; currentRemote = [remoteArray objectAtIndex:0]; [networkController disconnect]; + + if ([[self currentRemote] playerRunningState] == ITMTRemotePlayerRunning) { + [self applicationLaunched:nil]; + } else { + [self applicationTerminated:nil]; + } [self timerUpdate]; return YES; } @@ -1176,7 +1187,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]; @@ -1198,7 +1209,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];