#import "StatusWindowController.h"
#import "CustomMenuTableView.h"
+#import <Security/Security.h>
+
#import <netinet/in.h>
#import <arpa/inet.h>
#import <openssl/sha.h>
#import <sys/types.h>
#import <sys/stat.h>
-#import <ITFoundation/ITLoginItem.h>
+#import <ITKit/ITLoginItem.h>
#import <ITKit/ITHotKeyCenter.h>
#import <ITKit/ITKeyCombo.h>
- (void)setupCustomizationTables;
- (void)setupMenuItems;
- (void)setupUI;
+- (void)setupScreenPopup;
- (void)setStatusWindowEntryEffect:(Class)effectClass;
- (void)setStatusWindowExitEffect:(Class)effectClass;
- (void)setCustomColor:(NSColor *)color updateWell:(BOOL)update;
@"DecrementRating",
@"ToggleShuffle",
@"ToggleLoop",
+ @"ToggleShufflability",
@"PopupMenu",
@"SetRating0",
@"SetRating1",
@"Decrement Rating",
@"Toggle Shuffle",
@"Toggle Loop",
+ @"Toggle Song Included In Shuffle",
@"Pop-up status menu",
[NSString stringWithUTF8String:"Set Rating: ☆☆☆☆☆"],
[NSString stringWithUTF8String:"Set Rating: ★☆☆☆☆"],
[self resetRemotePlayerTextFields];
[launchAtLoginCheckbox becomeFirstResponder];
[NSApp activateIgnoringOtherApps:YES];
- [window center];
+ if (![window isVisible]) {
+ [window center];
+ }
[window orderFrontRegardless];
[window makeKeyWindow];
}
} else if ( [sender tag] == 1120) {
mkdir([[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"] cString], 0744);
[[NSWorkspace sharedWorkspace] openFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Library/Application Support/MenuTunes/Scripts"]];
- }
+ } else if ( [sender tag] == 6010) {
+ //Toggle the other Audioscrobbler options
+ [df setBool:SENDER_STATE forKey:@"audioscrobblerEnabled"];
+ [audioscrobblerUseCacheCheckbox setEnabled:SENDER_STATE];
+ [audioscrobblerUserTextField setEnabled:SENDER_STATE];
+ [audioscrobblerPasswordTextField setEnabled:SENDER_STATE];
+ } else if ( [sender tag ] == 6015) {
+ [df setString:[sender stringValue] forKey:@"audioscrobblerUser"];
+ } else if ( [sender tag ] == 6030) {
+ //Set the password in the keychain
+ char *service = "Audioscrobbler";
+ NSString *account = [df stringForKey:@"audioscrobblerUser"];
+ SecKeychainItemRef item;
+ OSStatus status = SecKeychainFindGenericPassword(NULL, strlen(service), service, [account length], [account UTF8String], NULL, NULL, &item);
+ if (status == errSecItemNotFound) {
+ //Create the keychain
+ } else if (status == noErr) {
+ //Modify the current item
+ //SecKeychainItemFreeContent(NULL, item);
+ } else {
+ ITDebugLog(@"Audioscrobbler: Unable to retrieve keychain password.");
+ }
+ } else if ( [sender tag] == 6045) {
+ [df setBool:SENDER_STATE forKey:@"audioscrobblerCacheSubmissions"];
+ }
[df synchronize];
}
} else if ( [sender tag] == 2020) {
// Update screen selection.
-
+ [[StatusWindow sharedWindow] setScreen:[[NSScreen screens] objectAtIndex:[sender indexOfSelectedItem]]];
+ [df setInteger:[sender indexOfSelectedItem] forKey:@"statusWindowScreenIndex"];
+ [(MainController *)controller showCurrentTrackInfo];
+
} else if ( [sender tag] == 2030) {
[self setStatusWindowEntryEffect:[[sender selectedItem] representedObject]];
@"upcomingSongs",
@"separator",
@"preferences",
+ @"about",
@"quit",
nil] forKey:@"menu"];
[df setFloat:4.0 forKey:@"statusWindowVanishDelay"];
[df setInteger:(int)ITWindowPositionBottom forKey:@"statusWindowVerticalPosition"];
[df setInteger:(int)ITWindowPositionLeft forKey:@"statusWindowHorizontalPosition"];
+ [df setInteger:0 forKey:@"statusWindowScreenIndex"];
[[StatusWindow sharedWindow] setVerticalPosition:(int)ITWindowPositionBottom];
[[StatusWindow sharedWindow] setHorizontalPosition:(int)ITWindowPositionLeft];
[df setBool:YES forKey:@"showSongInfoOnChange"];
@"fastForward",
@"rewind",
@"showPlayer",
+ @"about",
@"quit",
nil];
NSData *colorData;
int selectedBGStyle;
id anItem;
-
+
[df setInteger:MT_CURRENT_VERSION forKey:@"appVersion"];
ITDebugLog(@"Setting up preferences UI.");
}
}
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setupScreenPopup) name:NSApplicationDidChangeScreenParametersNotification object:nil];
+ [self setupScreenPopup];
+
ITDebugLog(@"Setting up track info checkboxes.");
// Check current track info buttons
[albumCheckbox setState:[df boolForKey:@"showAlbum"] ? NSOnState : NSOffState];
[selectSharedPlayerButton setEnabled:YES];
}
+ //Setup the Audioscrobbler controls
+ if ([df boolForKey:@"audioscrobblerEnabled"]) {
+ [audioscrobblerEnabledCheckbox setState:NSOnState];
+ [audioscrobblerUserTextField setEnabled:YES];
+ [audioscrobblerPasswordTextField setEnabled:YES];
+ [audioscrobblerUseCacheCheckbox setEnabled:YES];
+ } else {
+ [audioscrobblerUserTextField setEnabled:NO];
+ [audioscrobblerPasswordTextField setEnabled:NO];
+ [audioscrobblerUseCacheCheckbox setEnabled:NO];
+ }
+ [audioscrobblerUserTextField setStringValue:[df stringForKey:@"audioscrobblerUser"]];
+ if ([[audioscrobblerUserTextField stringValue] length] > 0) {
+ [audioscrobblerPasswordTextField setStringValue:@"******"];
+ }
+
[[NSNotificationCenter defaultCenter] addObserver:sharingTableView selector:@selector(reloadData) name:@"ITMTFoundNetService" object:nil];
serverName = [df stringForKey:@"sharedPlayerName"];
}
}
+- (void)setupScreenPopup
+{
+ ITDebugLog(@"Setting up screen popup");
+ NSArray *screens = [NSScreen screens];
+ if ([screens count] > 1) {
+ int i, index = [df integerForKey:@"statusWindowScreenIndex"];
+ [screenPopup setEnabled:YES];
+ for (i = 0; i < [screens count]; i++) {
+ NSScreen *screen = [screens objectAtIndex:i];
+ if (![screen isEqual:[NSScreen mainScreen]]) {
+ [screenPopup addItemWithTitle:[NSString stringWithFormat:@"Screen %i", i + 1]];
+ }
+ }
+ [screenPopup selectItemAtIndex:index];
+ [[StatusWindow sharedWindow] setScreen:[[NSScreen screens] objectAtIndex:index]];
+ } else {
+ while ([screenPopup numberOfItems] > 1) {
+ [screenPopup removeItemAtIndex:1];
+ }
+ [screenPopup setEnabled:NO];
+ [[StatusWindow sharedWindow] setScreen:[NSScreen mainScreen]];
+ }
+}
+
- (void)setStatusWindowEntryEffect:(Class)effectClass
{
StatusWindow *sw = [StatusWindow sharedWindow];
- (void)dealloc
{
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
[hotKeysArray release];
[hotKeysDictionary release];
[effectClasses release];
[submenuItems release];
[myItems release];
[df release];
+ [super dealloc];
}
@end