X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/616ff6ad61cfc198ff23200bdb450c24d9436073..6f4e496029228bcdf5bedb233e45ca2b8e1f99ff:/MenuTunes.m diff --git a/MenuTunes.m b/MenuTunes.m index 9115c10..ee35882 100755 --- a/MenuTunes.m +++ b/MenuTunes.m @@ -44,14 +44,13 @@ menu = [[NSMenu alloc] initWithTitle:@""]; - if ( ( [currentRemote remotePlayerStatus] == ITMTRemotePlayerRunning ) ) { + if ( ( [currentRemote playerRunningStatus] == ITMTRemotePlayerRunning ) ) { [self remotePlayerLaunched:nil]; } else { [self remotePlayerTerminated:nil]; } - statusItem = [[ITStatusItem alloc] initWithStatusBar:[NSStatusBar systemStatusBar] - withLength:NSSquareStatusItemLength]; + statusItem = [[ITStatusItem alloc] initWithStatusBar:[NSStatusBar systemStatusBar] withLength:NSSquareStatusItemLength]; [statusItem setImage:[NSImage imageNamed:@"menu"]]; [statusItem setAlternateImage:[NSImage imageNamed:@"selected_image"]]; @@ -201,6 +200,7 @@ playPauseMenuItem = nil; upcomingSongsItem = nil; + songRatingMenuItem = nil; playlistItem = nil; [playlistMenu release]; playlistMenu = nil; @@ -280,31 +280,9 @@ action:nil keyEquivalent:@""]; } else if ([item isEqualToString:@"Song Rating"]) { - NSMenu *ratingSubmenu = [[NSMenu alloc] initWithTitle:@""]; - unichar whiteStar = 'o';//2606; - unichar blackStar = 'x';//2605; - NSString *whiteStarString = [NSString stringWithCharacters:&whiteStar - length:1]; - NSString *blackStarString = [NSString stringWithCharacters:&blackStar - length:1]; - NSString *string = @""; - int i; - - for (i = 0; i < 5; i++) { - string = [string stringByAppendingString:whiteStarString]; - } - for (i = 0; i < 6; i++) { - NSMenuItem *ratingItem; - ratingItem = [ratingSubmenu addItemWithTitle:string action:@selector(setSongRating:) keyEquivalent:@""]; - [ratingItem setTarget:self]; - [ratingItem setTag:i * 20]; - string = [string substringToIndex:4]; - string = [blackStarString stringByAppendingString:string]; - } - [[menu addItemWithTitle:@"Song Rating" + songRatingMenuItem = [menu addItemWithTitle:@"Song Rating" action:nil - keyEquivalent:@""] setSubmenu:ratingSubmenu]; - [ratingSubmenu autorelease]; + keyEquivalent:@""]; } else if ([item isEqualToString:@""]) { [menu addItem:[NSMenuItem separatorItem]]; } @@ -322,7 +300,7 @@ NSMenuItem *menuItem; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; - if ( ( isAppRunning = ITMTRemotePlayerNotRunning ) ) { + if ( ( isAppRunning == ITMTRemotePlayerNotRunning ) ) { return; } @@ -337,7 +315,6 @@ if (eqItem) { [self rebuildEQPresetsMenu]; } - if (trackInfoIndex > -1) { NSString *curSongName, *curAlbumName = @"", *curArtistName = @""; curSongName = [currentRemote currentSongTitle]; @@ -391,6 +368,36 @@ [menu insertItem:menuItem atIndex:trackInfoIndex + 1]; [menuItem release]; } + + if (songRatingMenuItem) { + int rating = (int)[currentRemote currentSongRating] * 10; + int i; + + for (i = 0; i < 5; i++) { + [[ratingMenu itemAtIndex:i] setState:NSOffState]; + } + + switch (rating) { + case 0: + [[ratingMenu itemAtIndex:5] setState:NSOnState]; + break; + case 2: + [[ratingMenu itemAtIndex:4] setState:NSOnState]; + break; + case 4: + [[ratingMenu itemAtIndex:3] setState:NSOnState]; + break; + case 6: + [[ratingMenu itemAtIndex:2] setState:NSOnState]; + break; + case 8: + [[ratingMenu itemAtIndex:1] setState:NSOnState]; + break; + case 10: + [[ratingMenu itemAtIndex:0] setState:NSOnState]; + break; + } + } } if ([defaults boolForKey:@"showName"]) { @@ -406,6 +413,9 @@ [menu removeItemAtIndex:[menu indexOfItemWithTitle:@"No Song"]]; [menu insertItem:menuItem atIndex:trackInfoIndex]; [menuItem release]; + + [songRatingMenuItem setSubmenu:ratingMenu]; + [songRatingMenuItem setEnabled:YES]; } } else if ([menu indexOfItemWithTitle:@"No Song"] == -1) { [menu removeItemAtIndex:trackInfoIndex]; @@ -439,6 +449,7 @@ didHaveAlbumName = (([curAlbumName length] > 0) ? YES : NO); } } + [menu update]; } //Rebuild the upcoming songs submenu. Can be improved a lot. @@ -522,9 +533,14 @@ [eqMenu release]; eqMenu = [[NSMenu alloc] initWithTitle:@""]; - enabledItem = [eqMenu addItemWithTitle:@"EQ Enabled" - action:NULL + enabledItem = [eqMenu addItemWithTitle:@"Disabled" + action:@selector(toggleEqualizer) keyEquivalent:@""]; + + if ([currentRemote equalizerEnabled] == NO) { + [enabledItem setState:NSOnState]; + } + [eqMenu addItem:[NSMenuItem separatorItem]]; for (i = 0; i < [eqPresets count]; i++) { @@ -593,7 +609,7 @@ int playlist = [currentRemote currentPlaylistIndex]; ITMTRemotePlayerState playerState = [currentRemote playerState]; - if ((playlist > 0) || playerState != stopped) { + if ((playlist > 0) || playerState != ITMTRemotePlayerStopped) { int trackPlayingIndex = [currentRemote currentSongIndex]; if (trackPlayingIndex != lastSongIndex) { @@ -652,7 +668,7 @@ } //Update Play/Pause menu item if (playPauseMenuItem){ - if (playerState == playing) { + if (playerState == ITMTRemotePlayerPlaying) { [playPauseMenuItem setTitle:@"Pause"]; } else { [playPauseMenuItem setTitle:@"Play"]; @@ -690,6 +706,9 @@ [upcomingSongsItem setSubmenu:nil]; [upcomingSongsItem setEnabled:NO]; + [songRatingMenuItem setSubmenu:nil]; + [songRatingMenuItem setEnabled:NO]; + menuItem = [[NSMenuItem alloc] initWithTitle:@"No Song" action:nil keyEquivalent:@""]; [menu insertItem:menuItem atIndex:trackInfoIndex]; [menuItem release]; @@ -701,7 +720,7 @@ isAppRunning = ITMTRemotePlayerRunning; //Restart the timer - refreshTimer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES]; + [NSThread detachNewThreadSelector:@selector(runTimerInNewThread) toTarget:self withObject:nil]; [self rebuildMenu]; //Rebuild the menu since no songs will be playing if (playlistItem) { @@ -713,6 +732,15 @@ [statusItem setMenu:menu]; //Set the menu back to the main one } +- (void)runTimerInNewThread +{ + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + refreshTimer = [[NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES] retain]; + [runLoop run]; + [pool release]; +} + - (void)remotePlayerTerminated:(NSNotification *)note { isAppRunning = ITMTRemotePlayerNotRunning; @@ -727,6 +755,7 @@ [statusItem setMenu:menu]; [refreshTimer invalidate]; + [refreshTimer release]; refreshTimer = nil; [self clearHotKeys]; } @@ -772,10 +801,10 @@ { ITMTRemotePlayerState state = [currentRemote playerState]; - if (state == playing) { + if (state == ITMTRemotePlayerPlaying) { [currentRemote pause]; [playPauseMenuItem setTitle:@"Play"]; - } else if ((state == forwarding) || (state == rewinding)) { + } else if ((state == ITMTRemotePlayerForwarding) || (state == ITMTRemotePlayerRewinding)) { [currentRemote pause]; [currentRemote play]; } else { @@ -796,7 +825,7 @@ - (void)fastForward:(id)sender { - [currentRemote fastForward]; + [currentRemote forward]; [playPauseMenuItem setTitle:@"Play"]; } @@ -806,8 +835,14 @@ [playPauseMenuItem setTitle:@"Play"]; } -- (void)setSongRating:(id)sender +- (void)toggleEqualizer +{ + [currentRemote setEqualizerEnabled:![currentRemote equalizerEnabled]]; +} + +- (IBAction)setSongRating:(id)sender { + NSLog(@"%f", [currentRemote currentSongRating]); NSLog(@"%f", (float)[sender tag] / 100.0); [currentRemote setCurrentSongRating:(float)[sender tag] / 100.0]; } @@ -1129,6 +1164,7 @@ { if (refreshTimer) { [refreshTimer invalidate]; + [refreshTimer release]; refreshTimer = nil; } [currentRemote halt];