X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/de2bf09451cd859cce4a514ad0fbff93cd9f3b0e..107e67ed9e5791f210cfaf2185e75ea5b5e84792:/PreferencesController.m diff --git a/PreferencesController.m b/PreferencesController.m index 372cce7..5f38b44 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -1,10 +1,15 @@ #import "PreferencesController.h" #import "MainController.h" #import "NetworkController.h" +#import "NetworkObject.h" #import "StatusWindow.h" #import "StatusWindowController.h" #import "CustomMenuTableView.h" +#import +#import +#import + #import #import #import @@ -181,20 +186,37 @@ static PreferencesController *prefs = nil; [df setBool:state forKey:@"enableSharing"]; //Disable/enable the use of shared player options [useSharedMenuTunesCheckbox setEnabled:!state]; - [sharePasswordCheckbox setEnabled:!state]; - [sharePasswordTextField setEnabled:!state]; + [usePasswordCheckbox setEnabled:state]; + [passwordTextField setEnabled:state]; + [nameTextField setEnabled:state]; + [selectSharedPlayerButton setEnabled:NO]; [controller setServerStatus:state]; //Set server status + } else if ( [sender tag] == 5015 ) { + [df setObject:[sender stringValue] forKey:@"sharedPlayerName"]; } else if ( [sender tag] == 5020 ) { [df setBool:SENDER_STATE forKey:@"enableSharingPassword"]; } else if ( [sender tag] == 5030 ) { - [df setObject:[sender stringValue] forKey:@"sharingPassword"]; + //Set the server password + const char *instring = [[sender stringValue] UTF8String]; + const char *password = "password"; + unsigned char result; + NSData *hashedPass, *passwordStringHash; + SHA1(instring, strlen(instring), &result); + hashedPass = [NSData dataWithBytes:&result length:strlen(&result)]; + SHA1(password, strlen(password), &result); + passwordStringHash = [NSData dataWithBytes:&result length:strlen(&result)]; + if (![hashedPass isEqualToData:passwordStringHash]) { + [df setObject:hashedPass forKey:@"sharedPlayerPassword"]; + } } else if ( [sender tag] == 5040 ) { BOOL state = SENDER_STATE; [df setBool:state forKey:@"useSharedPlayer"]; //Disable/enable the use of sharing options [shareMenuTunesCheckbox setEnabled:!state]; - [sharePasswordCheckbox setEnabled:!state]; - [sharePasswordTextField setEnabled:!state]; + [usePasswordCheckbox setEnabled:NO]; + [passwordTextField setEnabled:NO]; + [nameTextField setEnabled:NO]; + [selectSharedPlayerButton setEnabled:state]; if (state) { [controller connectToServer]; @@ -202,10 +224,9 @@ static PreferencesController *prefs = nil; [controller disconnectFromServer]; } } else if ( [sender tag] == 5050 ) { - if ([sender clickedRow] > -1) { - //Set sharedPlayerHost - //[df setObject:[[[[NetworkController sharedController] remoteServices] objectAtIndex:[sender clickedRow]] objectForKey:@"ip"] forKey:@"sharedPlayerHost"]; - } + //Do nothing on table view click + } else if ( [sender tag] == 5051 ) { + [df setObject:[sender stringValue] forKey:@"sharedPlayerHost"]; } else if ( [sender tag] == 5060 ) { //Show selection sheet [NSApp beginSheet:selectPlayerSheet modalForWindow:window modalDelegate:self didEndSelector:NULL contextInfo:nil]; @@ -215,15 +236,22 @@ static PreferencesController *prefs = nil; NSRect frame = [selectPlayerSheet frame]; frame.origin.y -= 58; frame.size.height = 273; - [selectPlayerSheet setFrame:frame display:YES animate:YES]; [selectPlayerBox setContentView:zeroConfView]; - } else if ([selectPlayerBox contentView] != manualView) { + [selectPlayerSheet setFrame:frame display:YES animate:YES]; + } else if ( ([sender indexOfItem:[sender selectedItem]] == 1) && ([selectPlayerBox contentView] != manualView) ){ NSRect frame = [selectPlayerSheet frame]; frame.origin.y += 58; frame.size.height = 215; - [selectPlayerSheet setFrame:frame display:YES animate:YES]; + //[window makeFirstResponder:hostTextField]; [selectPlayerBox setContentView:manualView]; + [selectPlayerSheet setFrame:frame display:YES animate:YES]; + [hostTextField selectText:nil]; } + } else if ( [sender tag] == 5150 ) { + const char *instring = [[sender stringValue] UTF8String]; + unsigned char result; + SHA1(instring, strlen(instring), &result); + [df setObject:[NSData dataWithBytes:&result length:strlen(&result)] forKey:@"connectPassword"]; } else if ( [sender tag] == 5110 ) { //Cancel [NSApp endSheet:selectPlayerSheet]; @@ -241,14 +269,16 @@ static PreferencesController *prefs = nil; [df setObject:[hostTextField stringValue] forKey:@"sharedPlayerHost"]; } else { if ([sharingTableView selectedRow] > -1) { - [df setObject:[[[[NetworkController sharedController] remoteServices] objectAtIndex:[sharingTableView selectedRow]] objectForKey:@"ip"] forKey:@"sharedPlayerHost"]; + [df setObject:[NSString stringWithCString:inet_ntoa((*(struct sockaddr_in*)[[[[NetworkController sharedController] remoteServices] objectAtIndex:[sharingTableView selectedRow]] bytes]).sin_addr)] forKey:@"sharedPlayerHost"]; } } - if (![controller connectToServer]) { - NSRunAlertPanel(@"Connection error.", @"The MenuTunes server you attempted to connect to was not responding. MenuTunes will revert back to the local player.", @"OK", nil, nil); - } else { + if ([controller connectToServer]) { [useSharedMenuTunesCheckbox setState:NSOnState]; + [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; + [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; + } else { + NSRunAlertPanel(@"Connection error.", @"The MenuTunes server you attempted to connect to was not responding. MenuTunes will revert back to the local player.", @"OK", nil, nil); } } [df synchronize]; @@ -552,6 +582,7 @@ static PreferencesController *prefs = nil; NSMutableDictionary *loginwindow; NSMutableArray *loginarray; NSEnumerator *loginEnum, *keyArrayEnum; + NSString *serverName; id anItem; ITDebugLog(@"Setting up preferences UI."); @@ -612,22 +643,39 @@ static PreferencesController *prefs = nil; [shareMenuTunesCheckbox setState:NSOnState]; [useSharedMenuTunesCheckbox setEnabled:NO]; [selectSharedPlayerButton setEnabled:NO]; - [hostTextField setEnabled:NO]; + [passwordTextField setEnabled:YES]; + [usePasswordCheckbox setEnabled:YES]; + [nameTextField setEnabled:YES]; } else if ([df boolForKey:@"useSharedPlayer"]) { [useSharedMenuTunesCheckbox setState:NSOnState]; [shareMenuTunesCheckbox setEnabled:NO]; - [sharePasswordCheckbox setEnabled:NO]; - [sharePasswordTextField setEnabled:NO]; + [selectSharedPlayerButton setEnabled:YES]; } [[NSNotificationCenter defaultCenter] addObserver:sharingTableView selector:@selector(reloadData) name:@"ITMTFoundNetService" object:nil]; + serverName = [df stringForKey:@"sharedPlayerName"]; + if (!serverName || [serverName length] == 0) { + serverName = @"MenuTunes Shared Player"; + } + [nameTextField setStringValue:serverName]; + [selectPlayerBox setContentView:zeroConfView]; - [sharePasswordCheckbox setState:([df boolForKey:@"enableSharingPassword"] ? NSOnState : NSOffState)]; - //[sharePasswordTextField setStringValue:@""]; //DO THIS LATER + [usePasswordCheckbox setState:([df boolForKey:@"enableSharingPassword"] ? NSOnState : NSOffState)]; + if ([df dataForKey:@"sharedPlayerPassword"]) { + [passwordTextField setStringValue:@"password"]; + } if ([df stringForKey:@"sharedPlayerHost"]) { [hostTextField setStringValue:[df stringForKey:@"sharedPlayerHost"]]; } + + if ([[NetworkController sharedController] isConnectedToServer]) { + [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; + [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; + } else { + [selectedPlayerTextField setStringValue:@"No shared player selected."]; + [locationTextField setStringValue:@"-"]; + } } - (IBAction)changeMenus:(id)sender @@ -748,7 +796,7 @@ static PreferencesController *prefs = nil; } } else { if ([[aTableColumn identifier] isEqualToString:@"name"]) { - return [[[[NetworkController sharedController] remoteServices] objectAtIndex:rowIndex] objectForKey:@"name"]; + return [[[[NetworkController sharedController] remoteServices] objectAtIndex:rowIndex] name]; } else { return @"X"; }