X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/2404965b693451fd71dcffd06eb82695e9085389..0263903122cd22aefa9620a9497d5f58e332effb:/MainController.m diff --git a/MainController.m b/MainController.m index 67ce65d..307800f 100755 --- a/MainController.m +++ b/MainController.m @@ -55,6 +55,13 @@ static MainController *sharedController; SetITDebugMode(YES); } + if (([df integerForKey:@"appVersion"] < 1200) && ([df integerForKey:@"SongsInAdvance"] > 0)) { + [df removePersistentDomainForName:@"com.ithinksw.menutunes"]; + [df synchronize]; + [[PreferencesController sharedPrefs] registerDefaults]; + [[StatusWindowController sharedController] showPreferencesUpdateWindow]; + } + currentRemote = [self loadRemote]; [[self currentRemote] begin]; @@ -85,10 +92,14 @@ static MainController *sharedController; [[PreferencesController sharedPrefs] registerDefaults]; } - [StatusItemHack install]; - statusItem = [[ITStatusItem alloc] - initWithStatusBar:[NSStatusBar systemStatusBar] - withLength:NSSquareStatusItemLength]; + if ([df boolForKey:@"ITMTNoStatusItem"]) { + statusItem = nil; + } else { + [StatusItemHack install]; + statusItem = [[ITStatusItem alloc] + initWithStatusBar:[NSStatusBar systemStatusBar] + withLength:NSSquareStatusItemLength]; + } bling = [[MTBlingController alloc] init]; [self blingTime]; @@ -292,7 +303,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; @@ -406,6 +417,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]; @@ -475,6 +487,15 @@ static MainController *sharedController; [[PreferencesController sharedPrefs] showPrefsWindow:self]; } +- (void)showPreferencesAndClose +{ + ITDebugLog(@"Show preferences."); + [[PreferencesController sharedPrefs] showPrefsWindow:self]; + [[StatusWindow sharedWindow] setLocked:NO]; + [[StatusWindow sharedWindow] vanish:self]; + [[StatusWindow sharedWindow] setIgnoresMouseEvents:YES]; +} + - (void)showTestWindow { [self showCurrentTrackInfo]; @@ -499,6 +520,10 @@ static MainController *sharedController; - (ITMTRemote *)currentRemote { + if ([networkController isConnectedToServer] && ![[networkController networkObject] isValid]) { + [self networkError:nil]; + return nil; + } return currentRemote; } @@ -658,6 +683,7 @@ static MainController *sharedController; NSString *artist = nil; NSString *time = nil; NSString *track = nil; + NSImage *art = nil; int rating = -1; NS_DURING @@ -729,6 +755,14 @@ static MainController *sharedController; } } + if ( [df boolForKey:@"showAlbumArtwork"] ) { + NS_DURING + art = [[self currentRemote] currentSongAlbumArt]; + NS_HANDLER + [self networkError:localException]; + NS_ENDHANDLER + } + } else { title = NSLocalizedString(@"noSongPlaying", @"No song is playing."); } @@ -739,7 +773,8 @@ static MainController *sharedController; artist:artist time:time track:track - rating:rating]; + rating:rating + image:art]; } - (void)showUpcomingSongs @@ -997,7 +1032,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 { @@ -1008,8 +1043,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]; @@ -1069,12 +1103,12 @@ 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;