From 772a8143497a37a9c9ff9f437207f3d708052b92 Mon Sep 17 00:00:00 2001 From: michael starke Date: Wed, 22 Oct 2014 17:39:29 +0200 Subject: [PATCH] Global and Entry based defaults work. Entry defaults cannot be removed for now. --- MacPass/MPEntryInspectorViewController.m | 1 + MacPass/MPPasswordCreatorViewController.m | 25 +++++++++++++++-------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/MacPass/MPEntryInspectorViewController.m b/MacPass/MPEntryInspectorViewController.m index 60111a87..a6394364 100644 --- a/MacPass/MPEntryInspectorViewController.m +++ b/MacPass/MPEntryInspectorViewController.m @@ -273,6 +273,7 @@ typedef NS_ENUM(NSUInteger, MPEntryTab) { [self.generatePasswordButton setEnabled:NO]; MPPasswordCreatorViewController *viewController = [[MPPasswordCreatorViewController alloc] init]; viewController.allowsEntryDefaults = YES; + viewController.entry = self.entry; [self _showPopopver:viewController atView:self.passwordTextField onEdge:NSMinYEdge]; } diff --git a/MacPass/MPPasswordCreatorViewController.m b/MacPass/MPPasswordCreatorViewController.m index d13b71bf..8d264f27 100644 --- a/MacPass/MPPasswordCreatorViewController.m +++ b/MacPass/MPPasswordCreatorViewController.m @@ -93,7 +93,6 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { [self.customCharactersTextField setStringValue:_customString]; /* Value Transformer */ - id formatter = [[MPUniqueCharactersFormatter alloc] init]; [self. customCharactersTextField setFormatter:formatter]; @@ -166,7 +165,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { } - (IBAction)_setDefault:(id)sender { - if(self.useEntryDefaults) { + if(self.useEntryDefaults && self.entry) { NSMutableDictionary *entryDefaults = [[self _currentEntryDefaults] mutableCopy]; if(!entryDefaults) { entryDefaults = [[NSMutableDictionary alloc] initWithCapacity:4]; // we will only add one enty to new settings @@ -179,14 +178,18 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { if(!availableDefaults) { availableDefaults = [[NSMutableDictionary alloc] initWithCapacity:1]; } - availableDefaults[self.entry.uuid] = entryDefaults; + availableDefaults[[self.entry.uuid UUIDString]] = entryDefaults; + [[NSUserDefaults standardUserDefaults] setObject:availableDefaults forKey:kMPSettingsKeyPasswordDefaultsForEntry]; } - else { + else if(!self.useEntryDefaults) { [[NSUserDefaults standardUserDefaults] setInteger:self.passwordLength forKey:kMPSettingsKeyDefaultPasswordLength]; [[NSUserDefaults standardUserDefaults] setInteger:self.characterFlags forKey:kMPSettingsKeyPasswordCharacterFlags]; [[NSUserDefaults standardUserDefaults] setBool:self.useCustomString forKey:kMPSettingsKeyPasswordUseCustomString]; [[NSUserDefaults standardUserDefaults] setObject:[self.customCharactersTextField stringValue] forKey:kMPSettingsKeyPasswordCustomString]; } + else { + NSLog(@"Cannot set password generator defaults. Inconsitent state. Aborting."); + } [self.setDefaultButton setEnabled:NO]; } @@ -195,6 +198,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { - (void)setUseEntryDefaults:(BOOL)useEntryDefaults { if(self.useEntryDefaults != useEntryDefaults) { _useEntryDefaults = useEntryDefaults; + [self.setDefaultButton setEnabled:YES]; [self _setupDefaults]; [self reset]; } @@ -203,8 +207,7 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { - (void)setEntry:(KPKEntry *)entry { if(_entry != entry) { _entry = entry; - [self _setupDefaults]; - [self reset]; + self.useEntryDefaults = [self _hasValidDefaultsForCurrentEntry]; } } @@ -250,18 +253,18 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { - (NSDictionary *)_currentEntryDefaults { if(self.entry) { - return [self _availableEntryDefaults][self.entry.uuid]; + return [self _availableEntryDefaults][[self.entry.uuid UUIDString]]; } return nil; } - (void)_setupDefaults { NSDictionary *entryDefaults = [self _currentEntryDefaults]; - if(entryDefaults) { + if(entryDefaults && self.useEntryDefaults) { self.passwordLength = [entryDefaults[kMPSettingsKeyDefaultPasswordLength] integerValue]; self.characterFlags = [entryDefaults[kMPSettingsKeyPasswordCharacterFlags] integerValue]; self.useCustomString = [entryDefaults[kMPSettingsKeyPasswordUseCustomString] boolValue]; - self.customString = [entryDefaults[kMPSettingsKeyPasswordCustomString] stringValue]; + self.customString = entryDefaults[kMPSettingsKeyPasswordCustomString]; } else { self.passwordLength = [[NSUserDefaults standardUserDefaults] integerForKey:kMPSettingsKeyDefaultPasswordLength]; @@ -271,6 +274,10 @@ typedef NS_ENUM(NSUInteger, MPPasswordRating) { } } +- (BOOL)_hasValidDefaultsForCurrentEntry { + return (nil != [self _currentEntryDefaults]); +} + - (void)_resetCharacters { if(self.useCustomString) { [self.customButton setState:NSOnState];