#import <netinet/in.h>
#import <arpa/inet.h>
#import <openssl/sha.h>
+#import <sys/types.h>
+#import <sys/stat.h>
#import <ITFoundation/ITFoundation.h>
[passwordPanelOKButton setTitle:@"Connect"];
[passwordPanelTitle setStringValue:@"Password Required"];
[passwordPanelMessage setStringValue:[NSString stringWithFormat:@"Please enter a password for access to the MenuTunes player named %@ at %@.", [[[NetworkController sharedController] networkObject] serverName], [[NetworkController sharedController] remoteHost]]];
- [passwordPanel center];
[passwordPanel setLevel:NSStatusWindowLevel];
- [passwordPanel makeKeyAndOrderFront:nil];
+ [NSApp activateIgnoringOtherApps:YES];
+ [passwordPanel center];
+ [passwordPanel orderFrontRegardless];
+ [passwordPanel makeKeyWindow];
if ([NSApp runModalForWindow:passwordPanel]) {
return YES;
} else {
[passwordPanelOKButton setTitle:@"Retry"];
[passwordPanelTitle setStringValue:@"Invalid Password"];
[passwordPanelMessage setStringValue:[NSString stringWithFormat:@"The password entered for access to the MenuTunes player named %@ at %@ is invalid. Please provide a new password.", [[[NetworkController sharedController] networkObject] serverName], [[NetworkController sharedController] remoteHost]]];
- [passwordPanel center];
[passwordPanel setLevel:NSStatusWindowLevel];
- [passwordPanel makeKeyAndOrderFront:nil];
+ [NSApp activateIgnoringOtherApps:YES];
+ [passwordPanel center];
+ [passwordPanel orderFrontRegardless];
+ [passwordPanel makeKeyWindow];
if ([NSApp runModalForWindow:passwordPanel]) {
return YES;
} else {
}
[self resetRemotePlayerTextFields];
- [window center];
+ [launchAtLoginCheckbox becomeFirstResponder];
[NSApp activateIgnoringOtherApps:YES];
- [window performSelector:@selector(makeKeyAndOrderFront:) withObject:self afterDelay:0.0];
+ [window center];
+ [window orderFrontRegardless];
+ [window makeKeyWindow];
}
- (IBAction)showTestWindow:(id)sender
[df setBool:SENDER_STATE forKey:@"showTrackNumber"];
} else if ( [sender tag] == 1090) {
[df setBool:SENDER_STATE forKey:@"showTrackRating"];
+ } else if ( [sender tag] == 1100) {
+ [df setBool:SENDER_STATE forKey:@"showAlbumArtwork"];
+ } else if ( [sender tag] == 1105) {
+ [df setBool:SENDER_STATE forKey:@"showToolTip"];
+ } else if ( [sender tag] == 1110) {
+ [df setBool:SENDER_STATE forKey:@"runScripts"];
+ if (SENDER_STATE) {
+ [runScriptsCheckbox setState:NSOnState];
+ [showScriptsButton setEnabled:YES];
+ } else {
+ [showScriptsButton setEnabled:NO];
+ }
+ } 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"]];
}
[df synchronize];
}
[df setBool:state forKey:@"enableSharing"];
//Disable/enable the use of shared player options
[useSharedMenuTunesCheckbox setEnabled:!state];
- [usePasswordCheckbox setEnabled:state];
[passwordTextField setEnabled:state];
[nameTextField setEnabled:state];
[selectSharedPlayerButton setEnabled:NO];
} else if ( [sender tag] == 5015 ) {
[df setObject:[sender stringValue] forKey:@"sharedPlayerName"];
[[NetworkController sharedController] resetServerName];
- } else if ( [sender tag] == 5020 ) {
- [df setBool:SENDER_STATE forKey:@"enableSharingPassword"];
} else if ( [sender tag] == 5030 ) {
//Set the server password
const char *instring = [[sender stringValue] UTF8String];
- const char *password = "password";
+ const char *password = "p4s5w0rdMT1.2";
unsigned char *result;
NSData *hashedPass, *passwordStringHash;
+ if ([[sender stringValue] length] == 0) {
+ [df setObject:[NSData data] forKey:@"sharedPlayerPassword"];
+ return;
+ }
result = SHA1(instring, strlen(instring), NULL);
hashedPass = [NSData dataWithBytes:result length:strlen(result)];
result = SHA1(password, strlen(password), NULL);
passwordStringHash = [NSData dataWithBytes:result length:strlen(result)];
if (![hashedPass isEqualToData:passwordStringHash]) {
[df setObject:hashedPass forKey:@"sharedPlayerPassword"];
- [sender setStringValue:@"password"];
+ [sender setStringValue:@"p4s5w0rdMT1.2"];
}
} else if ( [sender tag] == 5040 ) {
BOOL state = SENDER_STATE;
[df setBool:state forKey:@"useSharedPlayer"];
//Disable/enable the use of sharing options
[shareMenuTunesCheckbox setEnabled:!state];
- [usePasswordCheckbox setEnabled:NO];
[passwordTextField setEnabled:NO];
[nameTextField setEnabled:NO];
[selectSharedPlayerButton setEnabled:state];
@"quit",
nil] forKey:@"menu"];
+ [df setInteger:MT_CURRENT_VERSION forKey:@"appVersion"];
[df setInteger:5 forKey:@"SongsInAdvance"];
// [df setBool:YES forKey:@"showName"]; // Song info will always show song title.
[df setBool:YES forKey:@"showArtist"];
+ [df setBool:YES forKey:@"showAlbumArtwork"];
[df setBool:NO forKey:@"showAlbum"];
[df setBool:NO forKey:@"showTime"];
[df setFloat:4.0 forKey:@"statusWindowVanishDelay"];
[df setInteger:(int)ITWindowPositionBottom forKey:@"statusWindowVerticalPosition"];
[df setInteger:(int)ITWindowPositionLeft forKey:@"statusWindowHorizontalPosition"];
+ [[StatusWindow sharedWindow] setVerticalPosition:(int)ITWindowPositionBottom];
+ [[StatusWindow sharedWindow] setHorizontalPosition:(int)ITWindowPositionLeft];
[df setBool:YES forKey:@"showSongInfoOnChange"];
[df setObject:[NSArchiver archivedDataWithRootObject:[NSColor blueColor]] forKey:@"statusWindowBackgroundColor"];
int selectedBGStyle;
id anItem;
+ [df setInteger:MT_CURRENT_VERSION forKey:@"appVersion"];
+
ITDebugLog(@"Setting up preferences UI.");
// Fill in the number of songs in advance to show field
[songsInAdvance setIntValue:[df integerForKey:@"SongsInAdvance"]];
[trackTimeCheckbox setState:[df boolForKey:@"showTime"] ? NSOnState : NSOffState];
[trackNumberCheckbox setState:[df boolForKey:@"showTrackNumber"] ? NSOnState : NSOffState];
[ratingCheckbox setState:[df boolForKey:@"showTrackRating"] ? NSOnState : NSOffState];
+ [albumArtworkCheckbox setState:[df boolForKey:@"showAlbumArtwork"] ? NSOnState : NSOffState];
+
+ [showToolTipCheckbox setState:[df boolForKey:@"showToolTip"] ? NSOnState : NSOffState];
+
+ if ([df boolForKey:@"runScripts"]) {
+ [runScriptsCheckbox setState:NSOnState];
+ [showScriptsButton setEnabled:YES];
+ } else {
+ [showScriptsButton setEnabled:NO];
+ }
// Set the launch at login checkbox state
ITDebugLog(@"Setting launch at login state.");
[useSharedMenuTunesCheckbox setEnabled:NO];
[selectSharedPlayerButton setEnabled:NO];
[passwordTextField setEnabled:YES];
- [usePasswordCheckbox setEnabled:YES];
[nameTextField setEnabled:YES];
} else if ([df boolForKey:@"useSharedPlayer"]) {
[useSharedMenuTunesCheckbox setState:NSOnState];
[nameTextField setStringValue:serverName];
[selectPlayerBox setContentView:zeroConfView];
- [usePasswordCheckbox setState:([df boolForKey:@"enableSharingPassword"] ? NSOnState : NSOffState)];
- if ([df dataForKey:@"sharedPlayerPassword"]) {
- [passwordTextField setStringValue:@"password"];
+ if ([[df dataForKey:@"sharedPlayerPassword"] length] > 0) {
+ [passwordTextField setStringValue:@"p4s5w0rdMT1.2"];
+ } else {
+ [passwordTextField setStringValue:@""];
}
if ([df stringForKey:@"sharedPlayerHost"]) {
[hostTextField setStringValue:[df stringForKey:@"sharedPlayerHost"]];
ITDebugLog(@"Synchronizing menus");
[df setObject:myItems forKey:@"menu"];
[df synchronize];
+
+ //If we're connected over a network, refresh the menu immediately
+ if ([[NetworkController sharedController] isConnectedToServer]) {
+ [controller timerUpdate];
+ }
}
- (void)setLaunchesAtLogin:(BOOL)flag