X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/f28cba7febce0cb71c39d69da3540d041e4660b7..d8c90094f595a5f513d844ea316e2fb8b1e479b7:/MenuController.m diff --git a/MenuController.m b/MenuController.m index f416474..f1e96fb 100755 --- a/MenuController.m +++ b/MenuController.m @@ -8,6 +8,7 @@ #import "MenuController.h" #import "MainController.h" +#import "NetworkController.h" #import "ITMTRemote.h" #import #import @@ -22,7 +23,7 @@ - (NSMenu *)eqMenu; - (void)setKeyEquivalentForCode:(short)code andModifiers:(long)modifiers onItem:(id )item; -- (BOOL)iPodAtPathAutomaticallyUpdates:(NSString *)name; +- (BOOL)iPodWithNameAutomaticallyUpdates:(NSString *)name; @end @implementation MenuController @@ -270,6 +271,20 @@ } } + if ([defaults boolForKey:@"showComposer"]) { + NSString *curComposer; + NS_DURING + curComposer = [[[MainController sharedController] currentRemote] currentSongComposer]; + NS_HANDLER + [[MainController sharedController] networkError:localException]; + NS_ENDHANDLER + ITDebugLog(@"Add Track Composer (\"%@\") menu item.", curComposer); + if ( curComposer ) { + [menu indentItem: + [menu addItemWithTitle:curComposer action:nil keyEquivalent:@""]]; + } + } + if ([defaults boolForKey:@"showTrackNumber"]) { int track; NS_DURING @@ -324,6 +339,23 @@ NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER + + if ([tempItem respondsToSelector:@selector(setAttributedTitle:)] && [defaults boolForKey:@"showAlbumArtwork"] && ![[NetworkController sharedController] isConnectedToServer]) { + NSImage *image = [[[MainController sharedController] currentRemote] currentSongAlbumArt]; + if (image) { + NSSize oldSize, newSize; + oldSize = [image size]; + if (oldSize.width > oldSize.height) newSize = NSMakeSize(110,oldSize.height * (110.0f / oldSize.width)); + else newSize = NSMakeSize(oldSize.width * (110.0f / oldSize.height),110); + image = [[[[NSImage alloc] initWithData:[image TIFFRepresentation]] autorelease] imageScaledSmoothlyToSize:newSize]; + + tempItem = [menu addItemWithTitle:@"" action:nil keyEquivalent:@""]; + NSTextAttachment *attachment = [[[NSTextAttachment alloc] init] autorelease]; + [[attachment attachmentCell] setImage:image]; + NSAttributedString *attrString = [NSAttributedString attributedStringWithAttachment:attachment]; + [tempItem setAttributedTitle:attrString]; + } + } } } else { ITDebugLog(@"No Track is Playing, Add \"No Song\" menu item."); @@ -438,6 +470,7 @@ NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER + ITDebugLog(@"Releasing old submenus."); [_ratingMenu release]; [_upcomingSongsMenu release]; [_playlistsMenu release]; @@ -572,11 +605,9 @@ id tempItem; ITMTRemotePlayerSource source = [[[MainController sharedController] currentRemote] currentSource]; int i, j; + NSMutableArray *indices = [[NSMutableArray alloc] init]; NS_DURING playlists = [[[MainController sharedController] currentRemote] playlists]; - /*playlists = [NSArray arrayWithObjects: - [NSArray arrayWithObjects:@"Library", [NSNumber numberWithInt:-1], @"Library", @"Playlist", nil], - [NSArray arrayWithObjects:@"Radio", [NSNumber numberWithInt:1], @"Radio", nil], nil];*/ NS_HANDLER [[MainController sharedController] networkError:localException]; NS_ENDHANDLER @@ -585,47 +616,61 @@ NSArray *curPlaylist = [playlists objectAtIndex:0]; NSString *name = [curPlaylist objectAtIndex:0]; ITDebugLog(@"Adding main source: %@", name); - for (i = 2; i < [curPlaylist count]; i++) { + for (i = 3; i < [curPlaylist count]; i++) { ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:i]); tempItem = [playlistsMenu addItemWithTitle:[curPlaylist objectAtIndex:i] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""]; - [tempItem setTag:i]; + [tempItem setTag:i - 1]; [tempItem setTarget:self]; } + ITDebugLog(@"Adding index to the index array."); + [indices addObject:[curPlaylist objectAtIndex:2]]; } - if ( (source == ITMTRemoteRadioSource) || ([playlists count] - 2 > 0) ) { - [playlistsMenu addItem:[NSMenuItem separatorItem]]; - } - - if (source == ITMTRemoteRadioSource) { - [[playlistsMenu addItemWithTitle:NSLocalizedString(@"radio", @"Radio") action:@selector(performPlaylistMenuAction:) keyEquivalent:@""] setState:NSOnState]; + if ([playlists count] > 1) { + if ([[[playlists objectAtIndex:1] objectAtIndex:1] intValue] == ITMTRemoteRadioSource) { + [indices addObject:[[playlists objectAtIndex:1] objectAtIndex:2]]; + if (source == ITMTRemoteRadioSource) { + [playlistsMenu addItem:[NSMenuItem separatorItem]]; + [[playlistsMenu addItemWithTitle:NSLocalizedString(@"radio", @"Radio") action:@selector(performPlaylistMenuAction:) keyEquivalent:@""] setState:NSOnState]; + } + } else { + [playlistsMenu addItem:[NSMenuItem separatorItem]]; + } } - for (i = 2; i < [playlists count]; i++) { - NSArray *curPlaylist = [playlists objectAtIndex:i]; - NSString *name = [curPlaylist objectAtIndex:0]; - NSMenu *submenu = [[NSMenu alloc] init]; - ITDebugLog(@"Adding source: %@", name); - - if ( ([[curPlaylist objectAtIndex:i] intValue] == ITMTRemoteiPodSource) && [self iPodAtPathAutomaticallyUpdates:[curPlaylist objectAtIndex:j]] ) { - ITDebugLog(@"Invalid iPod source."); - } else { - for (j = 2; j < [curPlaylist count]; j++) { - ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:j]); - tempItem = [submenu addItemWithTitle:[curPlaylist objectAtIndex:j] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""]; - [tempItem setTag:(i * 1000) + j]; - [tempItem setTarget:self]; + if ([playlists count] > 1) { + for (i = 1; i < [playlists count]; i++) { + NSArray *curPlaylist = [playlists objectAtIndex:i]; + if ([[curPlaylist objectAtIndex:1] intValue] != ITMTRemoteRadioSource) { + NSString *name = [curPlaylist objectAtIndex:0]; + NSMenu *submenu = [[NSMenu alloc] init]; + ITDebugLog(@"Adding source: %@", name); + + if ( ([[curPlaylist objectAtIndex:1] intValue] == ITMTRemoteiPodSource) && [self iPodWithNameAutomaticallyUpdates:name] ) { + ITDebugLog(@"Invalid iPod source."); + [playlistsMenu addItemWithTitle:name action:NULL keyEquivalent:@""]; + } else { + for (j = 3; j < [curPlaylist count]; j++) { + ITDebugLog(@"Adding playlist: %@", [curPlaylist objectAtIndex:j]); + tempItem = [submenu addItemWithTitle:[curPlaylist objectAtIndex:j] action:@selector(performPlaylistMenuAction:) keyEquivalent:@""]; + [tempItem setTag:(i * 1000) + j - 1]; + [tempItem setTarget:self]; + } + [[playlistsMenu addItemWithTitle:name action:NULL keyEquivalent:@""] setSubmenu:[submenu autorelease]]; + } + ITDebugLog(@"Adding index to the index array."); + [indices addObject:[curPlaylist objectAtIndex:2]]; } - [[playlistsMenu addItemWithTitle:name action:NULL keyEquivalent:@""] setSubmenu:[submenu autorelease]]; } } - - if ( (source == ITMTRemoteSharedLibrarySource) || (source == ITMTRemoteiPodSource) || (source == ITMTRemoteGenericDeviceSource) || (source == ITMTRemoteCDSource) ){ - tempItem = [playlistsMenu itemAtIndex:(int)[[[MainController sharedController] currentRemote] currentSourceIndex] + [playlistsMenu numberOfItems] - 5]; + ITDebugLog(@"Checking the current source."); + if ( (source == ITMTRemoteSharedLibrarySource) || (source == ITMTRemoteiPodSource) || (source == ITMTRemoteGenericDeviceSource) || (source == ITMTRemoteCDSource) ) { + tempItem = [playlistsMenu itemAtIndex:[playlistsMenu numberOfItems] + [indices indexOfObject:[NSNumber numberWithInt:[[[MainController sharedController] currentRemote] currentSourceIndex]]] - [indices count]]; [tempItem setState:NSOnState]; [[[tempItem submenu] itemAtIndex:_currentPlaylist - 1] setState:NSOnState]; } else if (source == ITMTRemoteLibrarySource && _currentPlaylist) { [[playlistsMenu itemAtIndex:_currentPlaylist - 1] setState:NSOnState]; } + [indices release]; ITDebugLog(@"Done Building \"Playlists\" menu"); return playlistsMenu; } @@ -981,14 +1026,15 @@ ITDebugLog(@"Done setting key equivalent on menu item: %@", [item title]); } -- (BOOL)iPodAtPathAutomaticallyUpdates:(NSString *)name +- (BOOL)iPodWithNameAutomaticallyUpdates:(NSString *)name { NSArray *volumes = [[NSWorkspace sharedWorkspace] mountedLocalVolumePaths]; NSEnumerator *volEnum = [volumes objectEnumerator]; NSString *nextVolume; - + ITDebugLog(@"Looking for an iPod named %@", name); while ( (nextVolume = [volEnum nextObject]) ) { - if ([nextVolume rangeOfString:name options:nil range:NSMakeRange(0, [name length] - 1)].location != NSNotFound) { + ITDebugLog(@"- %@", nextVolume); + if ([nextVolume rangeOfString:name options:nil /*range:NSMakeRange(0, [name length] - 1)*/].location != NSNotFound) { NSFileHandle *handle; NSData *data; NSString *path = [nextVolume stringByAppendingPathComponent:@"/iPod_Control/iTunes/iTunesPrefs"]; @@ -996,9 +1042,11 @@ ITDebugLog(@"Error, path isn't an iPod! %@", path); return NO; } - handle = [NSFileHandle fileHandleForReadingAtPath:name]; + handle = [NSFileHandle fileHandleForReadingAtPath:path]; + ITDebugLog(@"File handle: %@", handle); [handle seekToFileOffset:10]; data = [handle readDataOfLength:1]; + ITDebugLog(@"Data: %@", data); if ( (*((unsigned char*)[data bytes]) == 0x00) ) { ITDebugLog(@"iPod is manually updated. %@", path); return NO; @@ -1011,7 +1059,7 @@ } } } - return NO; + return YES; } @end \ No newline at end of file