X-Git-Url: http://git.ithinksw.org/MenuTunes.git/blobdiff_plain/d11efc8d287ca1643e9ac6a7b561cad7cd659bda..da05d51282a00722e05f2c777db5cc3d0623d348:/PreferencesController.m diff --git a/PreferencesController.m b/PreferencesController.m index 970ba88..4141086 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -1,6 +1,7 @@ #import "PreferencesController.h" #import "MainController.h" #import "NetworkController.h" +#import "NetworkObject.h" #import "StatusWindow.h" #import "StatusWindowController.h" #import "CustomMenuTableView.h" @@ -97,6 +98,8 @@ static PreferencesController *prefs = nil; nil]; hotKeysDictionary = [[NSMutableDictionary alloc] init]; controller = nil; + + [self setupWindow]; // Load in the nib, and perform any initial setup. } return self; } @@ -124,12 +127,37 @@ static PreferencesController *prefs = nil; #pragma mark INSTANCE METHODS /*************************************************************************/ +- (BOOL)showPasswordPanel +{ + [passwordPanel setLevel:NSStatusWindowLevel]; + [passwordPanelOKButton setTitle:@"OK"]; + [passwordPanelMessage setStringValue:[NSString stringWithFormat:@"Please enter a password for access to the MenuTunes player named %@ at %@.", [[[NetworkController sharedController] networkObject] serverName], [[NetworkController sharedController] remoteHost]]]; + [passwordPanel makeKeyAndOrderFront:nil]; + if ([NSApp runModalForWindow:passwordPanel]) { + return YES; + } else { + return NO; + } +} + +- (BOOL)showInvalidPasswordPanel +{ + [passwordPanel setLevel:NSStatusWindowLevel]; + [passwordPanelOKButton setTitle:@"Retry"]; + [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 makeKeyAndOrderFront:nil]; + if ([NSApp runModalForWindow:passwordPanel]) { + return YES; + } else { + return NO; + } +} + - (IBAction)showPrefsWindow:(id)sender { ITDebugLog(@"Showing preferences window."); if (! window) { // If window does not exist yet, then the nib hasn't been loaded. ITDebugLog(@"Window doesn't exist, initial setup."); - [self setupWindow]; // Load in the nib, and perform any initial setup. [self setupCustomizationTables]; // Setup the DnD manu config tables. [self setupMenuItems]; // Setup the arrays of menu items [self setupUI]; // Sets up additional UI @@ -198,14 +226,15 @@ static PreferencesController *prefs = nil; //Set the server password const char *instring = [[sender stringValue] UTF8String]; const char *password = "password"; - unsigned char result; + 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)]; + 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"]; } } else if ( [sender tag] == 5040 ) { BOOL state = SENDER_STATE; @@ -217,10 +246,16 @@ static PreferencesController *prefs = nil; [nameTextField setEnabled:NO]; [selectSharedPlayerButton setEnabled:state]; - if (state) { - [controller connectToServer]; + if (state && [controller connectToServer]) { + [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; + [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; } else { - [controller disconnectFromServer]; + [selectedPlayerTextField setStringValue:@"No shared player selected."]; + [locationTextField setStringValue:@"-"]; + if ([[NetworkController sharedController] isConnectedToServer]) { + [controller disconnectFromServer]; + } + } } else if ( [sender tag] == 5050 ) { //Do nothing on table view click @@ -248,9 +283,9 @@ static PreferencesController *prefs = 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"]; + unsigned char *result; + result = SHA1(instring, strlen(instring), NULL); + [df setObject:[NSData dataWithBytes:result length:strlen(result)] forKey:@"connectPassword"]; } else if ( [sender tag] == 5110 ) { //Cancel [NSApp endSheet:selectPlayerSheet]; @@ -264,21 +299,35 @@ static PreferencesController *prefs = nil; [NSApp endSheet:selectPlayerSheet]; [selectPlayerSheet orderOut:nil]; + [self changeSharingSetting:clientPasswordTextField]; + if ([selectPlayerBox contentView] == manualView) { [df setObject:[hostTextField stringValue] forKey:@"sharedPlayerHost"]; } else { if ([sharingTableView selectedRow] > -1) { - [df setObject:[NSString stringWithCString:inet_ntoa((*(struct sockaddr_in*)[[[[NetworkController sharedController] remoteServices] objectAtIndex:[sharingTableView selectedRow]] bytes]).sin_addr)] forKey:@"sharedPlayerHost"]; + [df setObject:[NSString stringWithCString:inet_ntoa((*(struct sockaddr_in*)[[[[[[NetworkController sharedController] remoteServices] objectAtIndex:[sharingTableView selectedRow]] addresses] objectAtIndex:0] bytes]).sin_addr)] forKey:@"sharedPlayerHost"]; } } if ([controller connectToServer]) { [useSharedMenuTunesCheckbox setState:NSOnState]; - [selectedPlayerTextField setStringValue:[[[MainController sharedController] currentRemote] sharedRemoteName]]; + [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); } + } else if ( [sender tag] == 6010 ) { + //Cancel password entry + [passwordPanel orderOut:nil]; + [NSApp stopModalWithCode:0]; + } else if ( [sender tag] == 6020 ) { + //OK password entry, retry connect + const char *instring = [[passwordPanelTextField stringValue] UTF8String]; + unsigned char *result; + result = SHA1(instring, strlen(instring), NULL); + [df setObject:[NSData dataWithBytes:result length:strlen(result)] forKey:@"connectPassword"]; + [passwordPanel orderOut:nil]; + [NSApp stopModalWithCode:1]; } [df synchronize]; } @@ -307,7 +356,6 @@ static PreferencesController *prefs = nil; } else if ( effectTag == 2103 ) { [sw setEntryEffect:[[[ITSlideHorizontallyWindowEffect alloc] initWithWindow:sw] autorelease]]; } else if ( effectTag == 2104 ) { - NSLog(@"dflhgldf"); [sw setEntryEffect:[[[ITPivotWindowEffect alloc] initWithWindow:sw] autorelease]]; } @@ -669,7 +717,7 @@ static PreferencesController *prefs = nil; } if ([[NetworkController sharedController] isConnectedToServer]) { - [selectedPlayerTextField setStringValue:[[[MainController sharedController] currentRemote] sharedRemoteName]]; + [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; } else { [selectedPlayerTextField setStringValue:@"No shared player selected."]; @@ -794,11 +842,7 @@ static PreferencesController *prefs = nil; return [[hotKeysDictionary objectForKey:[hotKeysArray objectAtIndex:rowIndex]] description]; } } else { - if ([[aTableColumn identifier] isEqualToString:@"name"]) { - return [[[[NetworkController sharedController] remoteServices] objectAtIndex:rowIndex] name]; - } else { - return @"X"; - } + return [[[[NetworkController sharedController] remoteServices] objectAtIndex:rowIndex] name]; } }