diff --git a/MacPass/MPAppDelegate.m b/MacPass/MPAppDelegate.m index cd831924..1b1ab11d 100644 --- a/MacPass/MPAppDelegate.m +++ b/MacPass/MPAppDelegate.m @@ -56,6 +56,7 @@ NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDi + (void)initialize { [MPSettingsHelper setupDefaults]; + [MPSettingsHelper migrateDefaults]; [MPUppercaseStringValueTransformer registerTransformer]; [MPStringLengthValueTransformer registerTransformer]; [MPStripLineBreaksTransformer registerTransformer]; diff --git a/MacPass/MPEntryViewController.m b/MacPass/MPEntryViewController.m index 4392a591..6c89cd2a 100644 --- a/MacPass/MPEntryViewController.m +++ b/MacPass/MPEntryViewController.m @@ -149,11 +149,11 @@ NSString *const _MPTAbleSecurCellView = @"PasswordCell"; [self.entryTable setAutosaveName:@"EntryTable"]; [self.entryTable setAutosaveTableColumns:YES]; - NSSortDescriptor *titleColumSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES selector:@selector(compare:)]; - NSSortDescriptor *userNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES selector:@selector(compare:)]; - NSSortDescriptor *urlSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"url" ascending:YES selector:@selector(compare:)]; - NSSortDescriptor *groupnameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"parent.name" ascending:YES selector:@selector(compare:)]; - NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timeInfo.lastModificationTime" ascending:YES selector:@selector(compare:)]; + NSSortDescriptor *titleColumSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; + NSSortDescriptor *userNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; + NSSortDescriptor *urlSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"url" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; + NSSortDescriptor *groupnameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"parent.name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; + NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timeInfo.lastModificationTime" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)]; [titleColumn setSortDescriptorPrototype:titleColumSortDescriptor]; [userNameColumn setSortDescriptorPrototype:userNameSortDescriptor]; diff --git a/MacPass/MPSettingsHelper.h b/MacPass/MPSettingsHelper.h index e0341717..960e599a 100644 --- a/MacPass/MPSettingsHelper.h +++ b/MacPass/MPSettingsHelper.h @@ -64,6 +64,11 @@ typedef NS_ENUM(NSUInteger, MPPasswordEncoding) { * Registers all the defaults for the applciaiton */ + (void)setupDefaults; + +/** + * Brings the defaults to a current status. Removes obsoltes entries. + */ ++ (void)migrateDefaults; /** * Convenience Method to create a bind path for the NSUserDefaultsController * diff --git a/MacPass/MPSettingsHelper.m b/MacPass/MPSettingsHelper.m index 72339d68..59b91348 100644 --- a/MacPass/MPSettingsHelper.m +++ b/MacPass/MPSettingsHelper.m @@ -43,6 +43,10 @@ NSString *const kMPSettingsKeyEntrySearchFilterMode = @"EntrySearchFilte [[NSUserDefaults standardUserDefaults] registerDefaults:[self _standardDefaults]]; } ++ (void)migrateDefaults { + [self _fixEntryTableSortDescriptors]; +} + + (NSString *)defaultControllerPathForKey:(NSString *)key { return [NSString stringWithFormat:@"values.%@", key]; } @@ -72,4 +76,22 @@ NSString *const kMPSettingsKeyEntrySearchFilterMode = @"EntrySearchFilte }; } ++ (void)_fixEntryTableSortDescriptors { + /* + MacPass < 0.4 did use compare: for the entry table view, + this was changed in 0.4 to localizedCaseInsensitiveCompare: + */ + NSData *descriptorData = [[NSUserDefaults standardUserDefaults] dataForKey:kMPSettingsKeyEntryTableSortDescriptors]; + if(!descriptorData) { + return; // No user defaults + } + NSArray *sortDescriptors = [NSUnarchiver unarchiveObjectWithData:descriptorData]; + for(NSSortDescriptor *descriptor in sortDescriptors) { + if([descriptor selector] == @selector(compare:)) { + [[NSUserDefaults standardUserDefaults] removeObjectForKey:kMPSettingsKeyEntryTableSortDescriptors]; + break; + } + } +} + @end