From da05d51282a00722e05f2c777db5cc3d0623d348 Mon Sep 17 00:00:00 2001 From: Kent Sutherland Date: Fri, 31 Oct 2003 05:06:07 +0000 Subject: [PATCH] More bugfixes in networking. Added password panels. Fixed bug with 0:60 time. --- English.lproj/Preferences.nib/classes.nib | 4 ++ English.lproj/Preferences.nib/info.nib | 1 - .../Preferences.nib/keyedobjects.nib | Bin 39331 -> 39788 bytes MainController.m | 6 +-- NetworkController.m | 24 +++++++-- NetworkObject.h | 2 +- NetworkObject.m | 19 ++++++- PreferencesController.h | 7 +++ PreferencesController.m | 48 ++++++++++++++++-- iTunesRemote.m | 2 +- libValidate.a | Bin 8032 -> 8032 bytes 11 files changed, 98 insertions(+), 15 deletions(-) diff --git a/English.lproj/Preferences.nib/classes.nib b/English.lproj/Preferences.nib/classes.nib index cebb794..a407ae6 100755 --- a/English.lproj/Preferences.nib/classes.nib +++ b/English.lproj/Preferences.nib/classes.nib @@ -30,6 +30,10 @@ menuTableView = CustomMenuTableView; nameCheckbox = NSButton; nameTextField = NSTextField; + passwordPanel = NSPanel; + passwordPanelMessage = NSTextField; + passwordPanelOKButton = NSButton; + passwordPanelTextField = NSTextField; passwordTextField = NSTextField; ratingCheckbox = NSButton; selectPlayerBox = NSBox; diff --git a/English.lproj/Preferences.nib/info.nib b/English.lproj/Preferences.nib/info.nib index 1c8a9f3..1bf11ab 100755 --- a/English.lproj/Preferences.nib/info.nib +++ b/English.lproj/Preferences.nib/info.nib @@ -21,7 +21,6 @@ 6 699 - 624 IBSystem Version 7B85 diff --git a/English.lproj/Preferences.nib/keyedobjects.nib b/English.lproj/Preferences.nib/keyedobjects.nib index e180aca1845d1224a988e1199660e5babe783152..04a312d2d91bc7470b111d4dea59dca82cf96f0d 100755 GIT binary patch literal 39788 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 DhBLIk literal 39331 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 CZqdE~ diff --git a/MainController.m b/MainController.m index a9e67e9..341eb8d 100755 --- a/MainController.m +++ b/MainController.m @@ -42,6 +42,7 @@ static MainController *sharedController; statusWindowController = [StatusWindowController sharedController]; menuController = [[MenuController alloc] init]; df = [[NSUserDefaults standardUserDefaults] retain]; + [[PreferencesController sharedPrefs] setController:self]; timerUpdating = NO; blinged = NO; } @@ -472,7 +473,6 @@ static MainController *sharedController; - (void)showPreferences { ITDebugLog(@"Show preferences."); - [[PreferencesController sharedPrefs] setController:self]; [[PreferencesController sharedPrefs] showPrefsWindow:self]; } @@ -959,11 +959,11 @@ static MainController *sharedController; ITDebugLog(@"Connection failed."); currentRemote = [remoteArray objectAtIndex:0]; return NO; - } else if (result == -1) { + } else { + //Do something about the password being invalid ITDebugLog(@"Connection failed."); currentRemote = [remoteArray objectAtIndex:0]; return NO; - //Do something about the password being invalid } } diff --git a/NetworkController.m b/NetworkController.m index 65962ba..1e7a230 100755 --- a/NetworkController.m +++ b/NetworkController.m @@ -14,6 +14,7 @@ #import "NetworkController.h" #import "MainController.h" #import "NetworkObject.h" +#import "PreferencesController.h" #import #import @@ -146,17 +147,32 @@ static NetworkController *sharedController; } if ([clientProxy requiresPassword]) { + ITDebugLog(@"Server requires password."); + //Check to see if a password is set in defaults + if ([[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"] == nil) { + ITDebugLog(@"Asking for password."); + if (![[PreferencesController sharedPrefs] showPasswordPanel]) { + ITDebugLog(@"Giving up connection attempt."); + [self disconnect]; + return -1; + } + } + + //Send the password ITDebugLog(@"Sending password."); - if (![clientProxy sendPassword:[[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]]) { + while (![clientProxy sendPassword:[[NSUserDefaults standardUserDefaults] dataForKey:@"connectPassword"]]) { ITDebugLog(@"Invalid password!"); - [self disconnect]; - return -1; + if (![[PreferencesController sharedPrefs] showInvalidPasswordPanel]) { + ITDebugLog(@"Giving up connection attempt."); + [self disconnect]; + return -1; + } } } ITDebugLog(@"Connected to host: %@", host); [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(disconnect) name:NSConnectionDidDieNotification object:clientConnection]; - connectedToServer = 1; + connectedToServer = YES; return 1; } diff --git a/NetworkObject.h b/NetworkObject.h index 75d534c..2222414 100755 --- a/NetworkObject.h +++ b/NetworkObject.h @@ -21,7 +21,7 @@ @interface NetworkObject : NSObject { - + BOOL _authenticated; } - (ITMTRemote *)remote; - (NSString *)serverName; diff --git a/NetworkObject.m b/NetworkObject.m index da316e1..32bbbc8 100755 --- a/NetworkObject.m +++ b/NetworkObject.m @@ -21,9 +21,24 @@ @implementation NetworkObject +- (id)init +{ + if ( (self = [super init]) ) { + if (![self requiresPassword]) { + _authenticated = YES; + } else { + _authenticated = NO; + } + } + return self; +} + - (ITMTRemote *)remote { - return [[MainController sharedController] currentRemote]; + if (_authenticated) + return [[MainController sharedController] currentRemote]; + else + return nil; } - (NSString *)serverName @@ -42,8 +57,10 @@ - (BOOL)sendPassword:(NSData *)password { if ([password isEqualToData:[[NSUserDefaults standardUserDefaults] dataForKey:@"sharedPlayerPassword"]]) { + _authenticated = YES; return YES; } else { + _authenticated = NO; return NO; } } diff --git a/PreferencesController.h b/PreferencesController.h index 9ac7365..c2cc388 100755 --- a/PreferencesController.h +++ b/PreferencesController.h @@ -33,6 +33,10 @@ IBOutlet CustomMenuTableView *menuTableView; IBOutlet NSButton *nameCheckbox; IBOutlet NSTextField *nameTextField; + IBOutlet NSPanel *passwordPanel; + IBOutlet NSTextField *passwordPanelMessage; + IBOutlet NSButton *passwordPanelOKButton; + IBOutlet NSTextField *passwordPanelTextField; IBOutlet NSTextField *passwordTextField; IBOutlet NSButton *ratingCheckbox; IBOutlet NSTextField *selectedPlayerTextField; @@ -68,6 +72,9 @@ - (id)controller; - (void)setController:(id)object; +- (BOOL)showPasswordPanel; +- (BOOL)showInvalidPasswordPanel; + - (IBAction)changeGeneralSetting:(id)sender; - (IBAction)changeSharingSetting:(id)sender; - (IBAction)changeStatusWindowSetting:(id)sender; diff --git a/PreferencesController.m b/PreferencesController.m index f6c6d7b..4141086 100755 --- a/PreferencesController.m +++ b/PreferencesController.m @@ -98,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; } @@ -125,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 @@ -219,14 +246,15 @@ static PreferencesController *prefs = nil; [nameTextField setEnabled:NO]; [selectSharedPlayerButton setEnabled:state]; - if (state) { + if (state && [controller connectToServer]) { [selectedPlayerTextField setStringValue:[[[NetworkController sharedController] networkObject] serverName]]; [locationTextField setStringValue:[[NetworkController sharedController] remoteHost]]; - [controller connectToServer]; } else { [selectedPlayerTextField setStringValue:@"No shared player selected."]; [locationTextField setStringValue:@"-"]; - [controller disconnectFromServer]; + if ([[NetworkController sharedController] isConnectedToServer]) { + [controller disconnectFromServer]; + } } } else if ( [sender tag] == 5050 ) { @@ -288,6 +316,18 @@ static PreferencesController *prefs = nil; } 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]; } diff --git a/iTunesRemote.m b/iTunesRemote.m index 3e25046..3253f45 100755 --- a/iTunesRemote.m +++ b/iTunesRemote.m @@ -635,7 +635,7 @@ - (NSString*)formatTimeInSeconds:(long)seconds { long final = seconds; NSString *finalString; - if (final > 60) { + if (final >= 60) { if (final > 3600) { finalString = [NSString stringWithFormat:@"%i:%@:%@",(final / 3600),[self zeroSixty:(int)((final % 3600) / 60)],[self zeroSixty:(int)((final % 3600) % 60)]]; } else { diff --git a/libValidate.a b/libValidate.a index 61c6a97317f9575a607f321d4a580f248c9c3ba3..bba70d47a0a96ecea51a393425ca3b4d7f95cd2d 100755 GIT binary patch delta 16 XcmaE0_rPv~EUT%3skz}sB|CWlG#v#Y delta 16 XcmaE0_rPv~EUST~g^9&RB|CWlG+qTP -- 2.20.1