X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/5ba3df3581e79b113dcf5eb6346baf246fa49da2..b392de720df0cb5b7c0aa95e0b519059a676c233:/MainController.m?ds=sidebyside diff --git a/MainController.m b/MainController.m index e6d338b..dd8c51d 100755 --- a/MainController.m +++ b/MainController.m @@ -4,6 +4,7 @@ #import #import #import +#import "StatusWindow.h" #import "StatusWindowController.h" #import "StatusItemHack.h" @@ -40,6 +41,7 @@ static MainController *sharedController; menuController = [[MenuController alloc] init]; df = [[NSUserDefaults standardUserDefaults] retain]; timerUpdating = NO; + blinged = NO; } return self; } @@ -51,9 +53,6 @@ static MainController *sharedController; SetITDebugMode(YES); } - bling = [[MTBlingController alloc] init]; - blingDate = nil; - currentRemote = [self loadRemote]; [currentRemote begin]; @@ -79,6 +78,14 @@ static MainController *sharedController; initWithStatusBar:[NSStatusBar systemStatusBar] withLength:NSSquareStatusItemLength]; + bling = [[MTBlingController alloc] init]; + [self blingTime]; + registerTimer = [[NSTimer scheduledTimerWithTimeInterval:10.0 + target:self + selector:@selector(blingTime) + userInfo:nil + repeats:YES] retain]; + if ([currentRemote playerRunningState] == ITMTRemotePlayerRunning) { [self applicationLaunched:nil]; } else { @@ -148,21 +155,64 @@ static MainController *sharedController; [pool release]; }*/ +- (void)setBlingTime:(NSDate*)date +{ + NSMutableDictionary *globalPrefs; + [df synchronize]; + globalPrefs = [[df persistentDomainForName:@".GlobalPreferences"] mutableCopy]; + if (date) { + [globalPrefs setObject:date forKey:@"ITMTTrialStart"]; + } else { + [globalPrefs removeObjectForKey:@"ITMTTrialStart"]; + } + [df setPersistentDomain:globalPrefs forName:@".GlobalPreferences"]; + [df synchronize]; + [globalPrefs release]; +} + +- (NSDate*)getBlingTime +{ + [df synchronize]; + return [[df persistentDomainForName:@".GlobalPreferences"] objectForKey:@"ITMTTrialStart"]; +} + - (void)blingTime { NSDate *now = [NSDate date]; - if ( (! blingDate) || ([now timeIntervalSinceDate:blingDate] >= 86400) ) { - [bling showPanelIfNeeded]; - [blingDate autorelease]; - blingDate = [now retain]; + if (![self blingBling]) { + if ( (! [self getBlingTime] ) || ([now timeIntervalSinceDate:[self getBlingTime]] < 0) ) { + [self setBlingTime:now]; + } + if ( ([now timeIntervalSinceDate:[self getBlingTime]] >= 604800) && (blinged != YES) ) { + blinged = YES; + [statusItem setEnabled:NO]; + [self clearHotKeys]; + if ([refreshTimer isValid]) { + [refreshTimer invalidate]; + } + [statusWindowController showRegistrationQueryWindow]; + } + } else { + if (blinged) { + [statusItem setEnabled:YES]; + [self setupHotKeys]; + if (![refreshTimer isValid]) { + [refreshTimer release]; + refreshTimer = refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.5 + target:self + selector:@selector(timerUpdate) + userInfo:nil + repeats:YES] retain]; + } + blinged = NO; + } + [self setBlingTime:nil]; } } - (void)blingNow { [bling showPanel]; - [blingDate autorelease]; - blingDate = [[NSDate date] retain]; } - (BOOL)blingBling @@ -371,6 +421,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]; @@ -620,6 +675,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; @@ -635,6 +696,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; @@ -678,6 +745,25 @@ static MainController *sharedController; [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:self]; +} + + /*************************************************************************/ #pragma mark - #pragma mark WORKSPACE NOTIFICATION HANDLERS @@ -687,6 +773,7 @@ static MainController *sharedController; { if (!note || [[[note userInfo] objectForKey:@"NSApplicationName"] isEqualToString:[currentRemote playerFullName]]) { ITDebugLog(@"Remote application launched."); + playerRunningState = ITMTRemotePlayerRunning; [currentRemote begin]; [self setLatestSongIdentifier:@""]; [self timerUpdate]; @@ -697,7 +784,6 @@ static MainController *sharedController; repeats:YES] retain]; //[NSThread detachNewThreadSelector:@selector(startTimerInNewThread) toTarget:self withObject:nil]; [self setupHotKeys]; - playerRunningState = ITMTRemotePlayerRunning; } }