From: Kent Sutherland Date: Wed, 9 Apr 2003 00:52:57 +0000 (+0000) Subject: Rewrote updateMenu/timerUpdate *again* Fixed some remote stuff X-Git-Tag: v1.0~158 X-Git-Url: http://git.ithinksw.org/MenuTunes.git/commitdiff_plain/d96f4c2ccb2399470f029aeb3f7957b7fe4aab06?hp=ee13ab078aee1bb34f14817175119872da6864ea Rewrote updateMenu/timerUpdate *again* Fixed some remote stuff --- diff --git a/OldMainController.h b/OldMainController.h index dfab004..c4d140b 100755 --- a/OldMainController.h +++ b/OldMainController.h @@ -30,8 +30,10 @@ //Used in updating the menu automatically NSTimer *refreshTimer; int trackInfoIndex; + int lastPlaylistIndex; NSString *lastSongIdentifier; + int lastSongRating; BOOL isPlayingRadio; ITMTRemotePlayerRunningState isAppRunning; diff --git a/OldMainController.m b/OldMainController.m index 82aedce..7dc107d 100755 --- a/OldMainController.m +++ b/OldMainController.m @@ -8,6 +8,7 @@ - (void)rebuildUpcomingSongsMenu; - (void)rebuildPlaylistMenu; - (void)rebuildEQPresetsMenu; +- (void)updateRatingMenu; - (void)setupHotKeys; - (void)timerUpdate; - (void)updateMenu; @@ -448,10 +449,7 @@ - (void)rebuildPlaylistMenu { NSArray *playlists = [currentRemote playlists]; - int i, curPlaylist = [currentRemote currentPlaylistIndex]; - - if (playlistMenu && ([playlists count] == [playlistMenu numberOfItems])) - return; + int i, currentPlaylist = [currentRemote currentPlaylistIndex]; [playlistMenu release]; playlistMenu = [[NSMenu alloc] initWithTitle:@""]; @@ -460,15 +458,15 @@ NSString *playlistName = [playlists objectAtIndex:i]; NSMenuItem *tempItem; tempItem = [[NSMenuItem alloc] initWithTitle:playlistName action:@selector(selectPlaylist:) keyEquivalent:@""]; - [tempItem setRepresentedObject:[NSNumber numberWithInt:i + 1]]; + [tempItem setTag:i + 1]; [playlistMenu addItem:tempItem]; [tempItem release]; } [playlistItem setSubmenu:playlistMenu]; [playlistItem setEnabled:YES]; - if (!isPlayingRadio) { - [[playlistMenu itemAtIndex:curPlaylist - 1] setState:NSOnState]; + if (!isPlayingRadio && currentPlaylist) { + [[playlistMenu itemAtIndex:currentPlaylist - 1] setState:NSOnState]; } } @@ -479,9 +477,6 @@ NSMenuItem *enabledItem; int i; - if (eqMenu && ([[currentRemote eqPresets] count] == [eqMenu numberOfItems])) - return; - [eqMenu release]; eqMenu = [[NSMenu alloc] initWithTitle:@""]; @@ -497,29 +492,44 @@ [eqMenu addItem:[NSMenuItem separatorItem]]; for (i = 0; i < [eqPresets count]; i++) { - NSString *setName = [eqPresets objectAtIndex:i]; + NSString *name = [eqPresets objectAtIndex:i]; NSMenuItem *tempItem; - if (setName) { - tempItem = [[NSMenuItem alloc] initWithTitle:setName action:@selector(selectEQPreset:) keyEquivalent:@""]; - [tempItem setTag:i]; - [eqMenu addItem:tempItem]; - [tempItem release]; + if (name) { + tempItem = [[NSMenuItem alloc] initWithTitle:name action:@selector(selectEQPreset:) keyEquivalent:@""]; + [tempItem setTag:i]; + [eqMenu addItem:tempItem]; + [tempItem release]; } } [eqItem setSubmenu:eqMenu]; + [eqItem setEnabled:YES]; [[eqMenu itemAtIndex:[currentRemote currentEQPresetIndex] + 1] setState:NSOnState]; } +- (void)updateRatingMenu +{ + int currentSongRating = ([currentRemote currentSongRating] * 5); + if ([currentRemote currentPlaylistIndex] && (currentSongRating != lastSongRating)) { + if ([currentRemote classOfPlaylistAtIndex:[currentRemote currentPlaylistIndex]] == ITMTRemotePlayerRadioPlaylist) { + return; + } + [[ratingMenu itemAtIndex:lastSongRating] setState:NSOffState]; + lastSongRating = currentSongRating; + [[ratingMenu itemAtIndex:lastSongRating] setState:NSOnState]; + } +} + - (void)timerUpdate { NSString *currentIdentifier = [currentRemote currentSongUniqueIdentifier]; - if (![lastSongIdentifier isEqualToString:currentIdentifier]) { - [self updateMenu]; - } else if (!isPlayingRadio && ([currentRemote classOfPlaylistAtIndex:[currentRemote currentPlaylistIndex]] == ITMTRemotePlayerRadioPlaylist)) { + if (![lastSongIdentifier isEqualToString:currentIdentifier] || + (!isPlayingRadio && ([currentRemote classOfPlaylistAtIndex:[currentRemote currentPlaylistIndex]] == ITMTRemotePlayerRadioPlaylist))) { [self rebuildMenu]; } + [self updateRatingMenu]; + //Update Play/Pause menu item if (playPauseItem){ if ([currentRemote playerPlayingState] == ITMTRemotePlayerPlaying) { @@ -534,51 +544,57 @@ { NSUserDefaults *defaults; int playlist = [currentRemote currentPlaylistIndex]; - BOOL wasPlayingRadio = isPlayingRadio; + int temp; if ( (isAppRunning == ITMTRemotePlayerNotRunning) ) { return; } defaults = [NSUserDefaults standardUserDefaults]; - isPlayingRadio = ([currentRemote classOfPlaylistAtIndex:playlist] == ITMTRemotePlayerRadioPlaylist); - // - // - //rebuild submenus, make them properly enabled for once... - // - // + if (upcomingSongsItem) { + [self rebuildUpcomingSongsMenu]; + } - if ( (trackInfoIndex > -1) && (playlist) ) { + if (playlistItem) { + [self rebuildPlaylistMenu]; + } + + if (eqItem) { + [self rebuildEQPresetsMenu]; + } + + if (ratingItem) { + if (isPlayingRadio || !playlist) { + [ratingItem setEnabled:NO]; + if ([ratingItem submenu]) { + [ratingItem setSubmenu:nil]; + } + } else { + int currentSongRating = ([currentRemote currentSongRating] * 5); + [[ratingMenu itemAtIndex:lastSongRating] setState:NSOffState]; + lastSongRating = currentSongRating; + [[ratingMenu itemAtIndex:lastSongRating] setState:NSOnState]; + [ratingItem setEnabled:YES]; + [ratingItem setSubmenu:ratingMenu]; + } + } + + //Set the new unique song identifier + lastSongIdentifier = [[currentRemote currentSongUniqueIdentifier] retain]; + + //If we're in a playlist or radio mode + if ( (trackInfoIndex > -1) && (playlist || isPlayingRadio) ) { NSString *title, *album, *artist; - int temp; - - lastSongIdentifier = [[currentRemote currentSongUniqueIdentifier] retain]; if ( (temp = [menu indexOfItemWithTitle:@"No Song"]) && (temp > -1) ) { [menu removeItemAtIndex:temp]; [menu insertItemWithTitle:@"Now Playing" action:NULL keyEquivalent:@"" atIndex:temp]; - } else { - if ([defaults boolForKey:@"showName"]) { - [menu removeItemAtIndex:trackInfoIndex + 1]; - } } title = [currentRemote currentSongTitle]; - if (!wasPlayingRadio && (temp == -1)) { - if (didHaveAlbumName && [defaults boolForKey:@"showAlbum"]) { - [menu removeItemAtIndex:trackInfoIndex + 1]; - } - if (didHaveArtistName && [defaults boolForKey:@"showArtist"]) { - [menu removeItemAtIndex:trackInfoIndex + 1]; - } - if ([defaults boolForKey:@"showTime"]) { - [menu removeItemAtIndex:trackInfoIndex + 1]; - } - } - if (!isPlayingRadio) { ([defaults boolForKey:@"showAlbum"]) ? (album = [currentRemote currentSongAlbum]) : (album = @""); @@ -609,6 +625,7 @@ [menu insertItemWithTitle:[NSString stringWithFormat:@" %@", title] action:nil keyEquivalent:@"" atIndex:trackInfoIndex + 1]; } } + [menu update]; } @@ -625,16 +642,8 @@ - (void)selectPlaylist:(id)sender { - int playlist = [[sender representedObject] intValue]; - if (!isPlayingRadio) { - int curPlaylist = [currentRemote currentPlaylistIndex]; - if (curPlaylist > 0) { - [[playlistMenu itemAtIndex:curPlaylist - 1] setState:NSOffState]; - } - } + int playlist = [sender tag]; [currentRemote switchToPlaylistAtIndex:playlist]; - [[playlistMenu itemAtIndex:playlist - 1] setState:NSOnState]; - [self updateMenu]; } - (void)selectEQPreset:(id)sender @@ -654,9 +663,11 @@ - (void)selectSongRating:(id)sender { - [[ratingMenu itemAtIndex:([currentRemote currentSongRating] / 20)] setState:NSOffState]; - [currentRemote setCurrentSongRating:(float)[sender tag] / 100.0]; + int newRating = [sender tag]; + [[ratingMenu itemAtIndex:lastSongRating] setState:NSOffState]; [sender setState:NSOnState]; + [currentRemote setCurrentSongRating:(float)newRating / 100.0]; + lastSongRating = newRating / 20; } - (void)playPause:(id)sender diff --git a/iTunesRemote.m b/iTunesRemote.m index 4d19980..f796d95 100755 --- a/iTunesRemote.m +++ b/iTunesRemote.m @@ -214,7 +214,7 @@ - (float)currentSongRating { return [[ITAppleEventCenter sharedCenter] - sendTwoTierAEWithRequestedKeyForNumber:@"pRte" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN] / 100; + sendTwoTierAEWithRequestedKeyForNumber:@"pRte" fromObjectByKey:@"pTrk" eventClass:@"core" eventID:@"getd" appPSN:iTunesPSN] / 100.0; } - (BOOL)setCurrentSongRating:(float)rating @@ -232,7 +232,8 @@ - (BOOL)setEqualizerEnabled:(BOOL)enabled { -[[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu), '----':obj { form:'prop', want:type('prop'), seld:type('pEQ '), from:'null'() }",enabled] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN]; + [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu), '----':obj { form:'prop', want:type('prop'), seld:type('pEQ '), from:'null'() }",enabled] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN]; + return YES; } - (NSArray *)eqPresets @@ -280,6 +281,7 @@ - (BOOL)setShuffleEnabled:(BOOL)enabled { [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu) ----:obj { form:'prop', want:type('prop'), seld:type('pShf'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }",enabled] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN]; + return YES; } - (ITMTRemotePlayerRepeatMode)repeatMode @@ -322,7 +324,7 @@ } [[ITAppleEventCenter sharedCenter] sendAEWithSendString:[NSString stringWithFormat:@"data:long(%lu) ----:obj { form:'prop', want:type('pRpt'), seld:type('pShf'), from:obj { form:'prop', want:type('prop'), seld:type('pPla'), from:'null'() } }",m00f] eventClass:@"core" eventID:@"setd" appPSN:iTunesPSN]; - + return YES; } - (BOOL)play