X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/9d8dbcc95c9e3ea959f034d5ddb2edcc71fe1f59..9c8f6e1b9b0b947d898a3d9bae3acb3999879791:/MainController.m diff --git a/MainController.m b/MainController.m index 06ae1d9..edd1e78 100755 --- a/MainController.m +++ b/MainController.m @@ -36,9 +36,10 @@ static MainController *sharedController; sharedController = self; remoteArray = [[NSMutableArray alloc] initWithCapacity:1]; - statusWindowController = [[StatusWindowController alloc] init]; + statusWindowController = [StatusWindowController sharedController]; menuController = [[MenuController alloc] init]; df = [[NSUserDefaults standardUserDefaults] retain]; + timerUpdating = NO; } return self; } @@ -89,6 +90,8 @@ static MainController *sharedController; [statusItem setImage:[NSImage imageNamed:@"MenuNormal"]]; [statusItem setAlternateImage:[NSImage imageNamed:@"MenuInverted"]]; + + [NSApp deactivate]; } - (ITMTRemote *)loadRemote @@ -200,15 +203,19 @@ static MainController *sharedController; - (void)timerUpdate { - if ( [self songChanged] ) { + if ( [self songChanged] && (timerUpdating != YES) ) { ITDebugLog(@"The song changed."); - [self setLatestSongIdentifier:[currentRemote playerStateUniqueIdentifier]]; + timerUpdating = YES; latestPlaylistClass = [currentRemote currentPlaylistClass]; [menuController rebuildSubmenus]; if ( [df boolForKey:@"showSongInfoOnChange"] ) { -// [self performSelector:@selector(showCurrentTrackInfo) withObject:nil afterDelay:0.0]; + [self performSelector:@selector(showCurrentTrackInfo) withObject:nil afterDelay:0.0]; } + + [self setLatestSongIdentifier:[currentRemote playerStateUniqueIdentifier]]; + + timerUpdating = NO; } } @@ -364,6 +371,11 @@ static MainController *sharedController; { ITHotKey *hotKey; ITDebugLog(@"Setting up hot keys."); + + if (playerRunningState == ITMTRemotePlayerNotRunning) { + return; + } + if ([df objectForKey:@"PlayPause"] != nil) { ITDebugLog(@"Setting up play pause hot key."); hotKey = [[ITHotKey alloc] init]; @@ -493,10 +505,11 @@ static MainController *sharedController; NSString *album = nil; NSString *artist = nil; NSString *time = nil; - int trackNumber = 0; - int trackTotal = 0; + NSString *track = nil; int rating = -1; + ITDebugLog(@"Showing track info status window."); + if ( title ) { if ( [df boolForKey:@"showAlbum"] ) { @@ -508,16 +521,27 @@ static MainController *sharedController; } if ( [df boolForKey:@"showTime"] ) { - time = [currentRemote currentSongLength]; + time = [NSString stringWithFormat:@"%@: %@ / %@", + @"Time", + [currentRemote currentSongElapsed], + [currentRemote currentSongLength]]; } - if ( [df boolForKey:@"showNumber"] ) { - trackNumber = [currentRemote currentSongTrack]; - trackTotal = [currentRemote currentAlbumTrackCount]; + if ( [df boolForKey:@"showTrackNumber"] ) { + int trackNo = [currentRemote currentSongTrack]; + int trackCount = [currentRemote currentAlbumTrackCount]; + + if ( (trackNo > 0) || (trackCount > 0) ) { + track = [NSString stringWithFormat:@"%@: %i %@ %i", + @"Track", trackNo, @"of", trackCount]; + } } - if ( [df boolForKey:@"showRating"] ) { - rating = ( [currentRemote currentSongRating] * 5 ); + if ( [df boolForKey:@"showTrackRating"] ) { + float currentRating = [currentRemote currentSongRating]; + if (currentRating >= 0.0) { + rating = ( currentRating * 5 ); + } } } else { @@ -529,8 +553,7 @@ static MainController *sharedController; album:album artist:artist time:time - trackNumber:trackNumber - trackTotal:trackTotal + track:track rating:rating]; } @@ -602,6 +625,12 @@ static MainController *sharedController; { float rating = [currentRemote currentSongRating]; ITDebugLog(@"Incrementing rating."); + + if ([currentRemote currentPlaylistIndex] == 0) { + ITDebugLog(@"No song playing, rating change aborted."); + return; + } + rating += 0.2; if (rating > 1.0) { rating = 1.0; @@ -617,6 +646,12 @@ static MainController *sharedController; { float rating = [currentRemote currentSongRating]; ITDebugLog(@"Decrementing rating."); + + if ([currentRemote currentPlaylistIndex] == 0) { + ITDebugLog(@"No song playing, rating change aborted."); + return; + } + rating -= 0.2; if (rating < 0.0) { rating = 0.0; @@ -652,14 +687,33 @@ static MainController *sharedController; - (void)toggleShuffle { - bool newShuffleEnabled = ![currentRemote shuffleEnabled]; + BOOL newShuffleEnabled = ( ! [currentRemote shuffleEnabled] ); ITDebugLog(@"Toggling shuffle mode."); [currentRemote setShuffleEnabled:newShuffleEnabled]; //Show shuffle status window ITDebugLog(@"Setting shuffle mode to %i", newShuffleEnabled); - [statusWindowController showRepeatWindowWithMode:newShuffleEnabled]; + [statusWindowController showShuffleWindow:newShuffleEnabled]; } +- (void)registerNowOK +{ + [[StatusWindow sharedWindow] setLocked:NO]; + [[StatusWindow sharedWindow] vanish:self]; + [[StatusWindow sharedWindow] setIgnoresMouseEvents:YES]; + + [self blingNow]; +} + +- (void)registerNowCancel +{ + [[StatusWindow sharedWindow] setLocked:NO]; + [[StatusWindow sharedWindow] vanish:self]; + [[StatusWindow sharedWindow] setIgnoresMouseEvents:YES]; + + [NSApp terminate]; +} + + /*************************************************************************/ #pragma mark - #pragma mark WORKSPACE NOTIFICATION HANDLERS