fixed #152 Sorting now ignored case. All previously saved sorting settings in the entry view will be reverted to the default behaviour

This commit is contained in:
michael starke
2014-03-11 22:01:28 +01:00
parent fa4a805f8f
commit 5b69453868
4 changed files with 33 additions and 5 deletions

View File

@@ -56,6 +56,7 @@ NSString *const MPDidChangeStoredKeyFilesSettings = @"com.hicknhack.macpass.MPDi
+ (void)initialize { + (void)initialize {
[MPSettingsHelper setupDefaults]; [MPSettingsHelper setupDefaults];
[MPSettingsHelper migrateDefaults];
[MPUppercaseStringValueTransformer registerTransformer]; [MPUppercaseStringValueTransformer registerTransformer];
[MPStringLengthValueTransformer registerTransformer]; [MPStringLengthValueTransformer registerTransformer];
[MPStripLineBreaksTransformer registerTransformer]; [MPStripLineBreaksTransformer registerTransformer];

View File

@@ -149,11 +149,11 @@ NSString *const _MPTAbleSecurCellView = @"PasswordCell";
[self.entryTable setAutosaveName:@"EntryTable"]; [self.entryTable setAutosaveName:@"EntryTable"];
[self.entryTable setAutosaveTableColumns:YES]; [self.entryTable setAutosaveTableColumns:YES];
NSSortDescriptor *titleColumSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES selector:@selector(compare:)]; NSSortDescriptor *titleColumSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor *userNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES selector:@selector(compare:)]; NSSortDescriptor *userNameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"username" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor *urlSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"url" ascending:YES selector:@selector(compare:)]; NSSortDescriptor *urlSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"url" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor *groupnameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"parent.name" ascending:YES selector:@selector(compare:)]; NSSortDescriptor *groupnameSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"parent.name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timeInfo.lastModificationTime" ascending:YES selector:@selector(compare:)]; NSSortDescriptor *dateSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timeInfo.lastModificationTime" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
[titleColumn setSortDescriptorPrototype:titleColumSortDescriptor]; [titleColumn setSortDescriptorPrototype:titleColumSortDescriptor];
[userNameColumn setSortDescriptorPrototype:userNameSortDescriptor]; [userNameColumn setSortDescriptorPrototype:userNameSortDescriptor];

View File

@@ -64,6 +64,11 @@ typedef NS_ENUM(NSUInteger, MPPasswordEncoding) {
* Registers all the defaults for the applciaiton * Registers all the defaults for the applciaiton
*/ */
+ (void)setupDefaults; + (void)setupDefaults;
/**
* Brings the defaults to a current status. Removes obsoltes entries.
*/
+ (void)migrateDefaults;
/** /**
* Convenience Method to create a bind path for the NSUserDefaultsController * Convenience Method to create a bind path for the NSUserDefaultsController
* *

View File

@@ -43,6 +43,10 @@ NSString *const kMPSettingsKeyEntrySearchFilterMode = @"EntrySearchFilte
[[NSUserDefaults standardUserDefaults] registerDefaults:[self _standardDefaults]]; [[NSUserDefaults standardUserDefaults] registerDefaults:[self _standardDefaults]];
} }
+ (void)migrateDefaults {
[self _fixEntryTableSortDescriptors];
}
+ (NSString *)defaultControllerPathForKey:(NSString *)key { + (NSString *)defaultControllerPathForKey:(NSString *)key {
return [NSString stringWithFormat:@"values.%@", 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 @end