2
0

Retire use of confinement concurrency type.

[FIXED]     Confinement concurrency type is just all sorts of buggy.
This commit is contained in:
Maarten Billemont 2013-06-16 12:39:52 -04:00
parent 3cb8215d5a
commit 0813fb40d0
16 changed files with 87 additions and 100 deletions

@ -1 +1 @@
Subproject commit fa01dea4ec70d12a8b2db48e26b50271451a16e1
Subproject commit 039dc04e667199396765dd394b70e3f38f04ea33

View File

@ -755,7 +755,7 @@ static NSString *ETagIfPresent(GTLObject *obj) {
// Build up the array of RPC calls.
NSMutableArray *rpcPayloads = [NSMutableArray arrayWithCapacity:numberOfQueries];
NSMutableArray *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries];
NSMutableSet *requestIDs = [NSMutableSet setWithCapacity:numberOfQueries];
for (GTLQuery *query in queries) {
NSString *methodName = query.methodName;
NSDictionary *parameters = query.JSON;

View File

@ -19,7 +19,7 @@
+ (instancetype)get;
- (MPUserEntity *)activeUserForThread;
- (MPUserEntity *)activeUserForMainThread;
- (MPUserEntity *)activeUserInContext:(NSManagedObjectContext *)moc;
- (void)setActiveUser:(MPUserEntity *)activeUser;

View File

@ -24,9 +24,9 @@
#endif
}
- (MPUserEntity *)activeUserForThread {
- (MPUserEntity *)activeUserForMainThread {
return [self activeUserInContext:[MPAppDelegate_Shared managedObjectContextForThreadIfReady]];
return [self activeUserInContext:[MPAppDelegate_Shared managedObjectContextForMainThreadIfReady]];
}
- (MPUserEntity *)activeUserInContext:(NSManagedObjectContext *)moc {

View File

@ -20,12 +20,13 @@ typedef enum {
@interface MPAppDelegate_Shared(Store)<UbiquityStoreManagerDelegate>
+ (NSManagedObjectContext *)managedObjectContextForThreadIfReady;
+ (NSManagedObjectContext *)managedObjectContextForMainThreadIfReady;
+ (BOOL)managedObjectContextPerformBlock:(void (^)(NSManagedObjectContext *context))mocBlock;
+ (BOOL)managedObjectContextPerformBlockAndWait:(void (^)(NSManagedObjectContext *context))mocBlock;
- (UbiquityStoreManager *)storeManager;
/** @param completion The block to execute after adding the element, executed from the main thread with the new element in the main MOC. */
- (void)addElementNamed:(NSString *)siteName completion:(void (^)(MPElementEntity *element))completion;
- (MPElementEntity *)changeElement:(MPElementEntity *)element inContext:(NSManagedObjectContext *)context toType:(MPElementType)type;
- (MPImportResult)importSites:(NSString *)importedSitesString

View File

@ -39,19 +39,14 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
#pragma mark - Core Data setup
+ (NSManagedObjectContext *)managedObjectContextForThreadIfReady {
+ (NSManagedObjectContext *)managedObjectContextForMainThreadIfReady {
NSAssert([[NSThread currentThread] isMainThread], @"Can only access main MOC from the main thread.");
NSManagedObjectContext *mainManagedObjectContext = [[self get] mainManagedObjectContextIfReady];
if (!mainManagedObjectContext)
if (!mainManagedObjectContext || ![[NSThread currentThread] isMainThread])
return nil;
if ([[NSThread currentThread] isMainThread])
return mainManagedObjectContext;
NSManagedObjectContext
*threadManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
threadManagedObjectContext.parentContext = mainManagedObjectContext;
return threadManagedObjectContext;
}
+ (BOOL)managedObjectContextPerformBlock:(void (^)(NSManagedObjectContext *context))mocBlock {
@ -396,8 +391,8 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
return;
}
[MPAppDelegate_Shared managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) {
MPUserEntity *activeUser = [self activeUserInContext:moc];
[MPAppDelegate_Shared managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPUserEntity *activeUser = [self activeUserInContext:context];
assert(activeUser);
MPElementType type = activeUser.defaultType;
@ -406,22 +401,22 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
NSString *typeEntityClassName = [MPAlgorithmDefault classNameOfType:type];
MPElementEntity *element = [NSEntityDescription insertNewObjectForEntityForName:typeEntityClassName
inManagedObjectContext:moc];
inManagedObjectContext:context];
element.name = siteName;
element.user = activeUser;
element.type = type;
element.lastUsed = [NSDate date];
element.version = MPAlgorithmDefaultVersion;
[moc saveToStore];
[context saveToStore];
NSError *error = nil;
if (element.objectID.isTemporaryID && ![moc obtainPermanentIDsForObjects:@[ element ] error:&error])
if (element.objectID.isTemporaryID && ![context obtainPermanentIDsForObjects:@[ element ] error:&error])
err(@"Failed to obtain a permanent object ID after creating new element: %@", error);
NSManagedObjectID *elementOID = [element objectID];
dispatch_async( dispatch_get_main_queue(), ^{
completion( (MPElementEntity *)[[MPAppDelegate_Shared managedObjectContextForThreadIfReady] objectRegisteredForID:elementOID] );
completion( (MPElementEntity *)[[MPAppDelegate_Shared managedObjectContextForMainThreadIfReady] objectRegisteredForID:elementOID] );
} );
}];
}
@ -689,7 +684,7 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
- (NSString *)exportSitesShowingPasswords:(BOOL)showPasswords {
MPUserEntity *activeUser = [self activeUserForThread];
MPUserEntity *activeUser = [self activeUserForMainThread];
inf(@"Exporting sites, %@, for: %@", showPasswords? @"showing passwords": @"omitting passwords", activeUser.userID);
// Header.

View File

@ -66,8 +66,8 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[[self.usersItem submenu] removeItem:obj];
}];
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
if (!moc) {
NSManagedObjectContext *context = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
if (!context) {
self.createUserItem.title = @"New User (Not ready)";
self.createUserItem.enabled = NO;
self.createUserItem.toolTip = @"Please wait until the app is fully loaded.";
@ -83,7 +83,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
NSError *error = nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPUserEntity class] )];
fetchRequest.sortDescriptors = @[ [NSSortDescriptor sortDescriptorWithKey:@"lastUsed" ascending:NO] ];
NSArray *users = [moc executeFetchRequest:fetchRequest error:&error];
NSArray *users = [context executeFetchRequest:fetchRequest error:&error];
if (!users)
err(@"Failed to load users: %@", error);
@ -94,7 +94,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
@"Then give iCloud some time to sync the new user to your Mac.";
}
MPUserEntity *activeUser = self.activeUserForThread;
MPUserEntity *activeUser = [self activeUserInContext:context];
for (MPUserEntity *user in users) {
NSMenuItem *userItem = [[NSMenuItem alloc] initWithTitle:user.name action:@selector(selectUser:) keyEquivalent:@""];
[userItem setTarget:self];
@ -113,8 +113,8 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[self signOutAnimated:NO];
NSError *error = nil;
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
self.activeUser = (MPUserEntity *)[moc existingObjectWithID:[item representedObject] error:&error];
NSManagedObjectContext *context = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
self.activeUser = (MPUserEntity *)[context existingObjectWithID:[item representedObject] error:&error];
if (error)
err(@"While looking up selected user: %@", error);
@ -261,7 +261,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[[NSNotificationCenter defaultCenter] addObserverForName:MPCheckConfigNotification object:nil queue:nil usingBlock:
^(NSNotification *note) {
self.rememberPasswordItem.state = [[MPConfig get].rememberLogin boolValue]? NSOnState: NSOffState;
self.savePasswordItem.state = [[MPMacAppDelegate get] activeUserForThread].saveKey? NSOnState: NSOffState;
self.savePasswordItem.state = [[MPMacAppDelegate get] activeUserForMainThread].saveKey? NSOnState: NSOffState;
self.dialogStyleRegular.state = ![[MPMacConfig get].dialogStyleHUD boolValue]? NSOnState: NSOffState;
self.dialogStyleHUD.state = [[MPMacConfig get].dialogStyleHUD boolValue]? NSOnState: NSOffState;
@ -283,13 +283,13 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
OSStatus status = InstallApplicationEventHandler(NewEventHandlerUPP( MPHotKeyHander ), GetEventTypeCount( hotKeyEvents ),
hotKeyEvents, (__bridge void *)self, NULL);
if (status != noErr)
err(@"Error installing application event handler: %d", status);
err(@"Error installing application event handler: %i", (int)status);
status = RegisterEventHotKey( 35 /* p */, controlKey + cmdKey, MPShowHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
if (status != noErr)
err(@"Error registering 'show' hotkey: %d", status);
err(@"Error registering 'show' hotkey: %i", (int)status);
status = RegisterEventHotKey( 35 /* p */, controlKey + optionKey + cmdKey, MPLockHotKey, GetApplicationEventTarget(), 0, &hotKeyRef );
if (status != noErr)
err(@"Error registering 'lock' hotkey: %d", status);
err(@"Error registering 'lock' hotkey: %i", (int)status);
// Initial display.
[NSApp activateIgnoringOtherApps:YES];
@ -301,11 +301,9 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
BOOL reopenPasswordWindow = [self.passwordWindow.window isVisible];
if (![[self activeUserForThread].objectID isEqual:activeUser.objectID]) {
[self.passwordWindow close];
self.passwordWindow = nil;
[super setActiveUser:activeUser];
}
self.usersItem.state = NSMixedState;
[[[self.usersItem submenu] itemArray] enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
@ -325,7 +323,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
- (void)updateMenuItems {
MPUserEntity *activeUser = [self activeUserForThread];
MPUserEntity *activeUser = [self activeUserForMainThread];
// if (!(self.showItem.enabled = ![self.passwordWindow.window isVisible])) {
// self.showItem.title = @"Show (Showing)";
// self.showItem.toolTip = @"Master Password is already showing.";
@ -390,7 +388,7 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
[NSApp activateIgnoringOtherApps:YES];
// If no user, can't activate.
if (![self activeUserForThread]) {
if (![self activeUserForMainThread]) {
[[NSAlert alertWithMessageText:@"No User Selected" defaultButton:[PearlStrings get].commonButtonOkay alternateButton:nil
otherButton:nil informativeTextWithFormat:
@"Begin by selecting or creating your user from the status menu (●●●|) next to the clock."]
@ -444,17 +442,17 @@ static OSStatus MPHotKeyHander(EventHandlerCallRef nextHandler, EventRef theEven
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender {
// Save changes in the application's managed object context before the application terminates.
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
if (!moc)
NSManagedObjectContext *context = [MPMacAppDelegate managedObjectContextForMainThreadIfReady];
if (!context)
return NSTerminateNow;
if (![moc commitEditing])
if (![context commitEditing])
return NSTerminateCancel;
if (![moc hasChanges])
if (![context hasChanges])
return NSTerminateNow;
[moc saveToStore];
[context saveToStore];
return NSTerminateNow;
}

View File

@ -43,7 +43,7 @@
[self setContent:@""];
[self.tipField setStringValue:@""];
[self.userLabel setStringValue:PearlString( @"%@'s password for:", [[MPMacAppDelegate get] activeUserForThread].name )];
[self.userLabel setStringValue:PearlString( @"%@'s password for:", [[MPMacAppDelegate get] activeUserForMainThread].name )];
[[MPMacAppDelegate get] addObserverBlock:^(NSString *keyPath, id object, NSDictionary *change, void *context) {
// [MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) {
// if (![MPAlgorithmDefault migrateUser:[[MPMacAppDelegate get] activeUserInContext:moc]])
@ -106,7 +106,7 @@
- (BOOL)ensureStoreLoaded {
if ([MPMacAppDelegate managedObjectContextForThreadIfReady]) {
if ([MPMacAppDelegate managedObjectContextForMainThreadIfReady]) {
// Store loaded.
if (self.loadingDataAlert.window)
[NSApp endSheet:self.loadingDataAlert.window];
@ -197,12 +197,12 @@
runModal];
if (returnCode_ == NSAlertDefaultReturn) {
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) {
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserInContext:moc];
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserInContext:context];
activeUser.keyID = nil;
[[MPMacAppDelegate get] forgetSavedKeyFor:activeUser];
[[MPMacAppDelegate get] signOutAnimated:YES];
[moc saveToStore];
[context saveToStore];
}];
}
break;
@ -315,7 +315,7 @@
if (notification.object == self.typeField) {
if ([self.typeField indexOfSelectedItem] < 0)
return;
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
MPElementType selectedType = [self selectedType];
if (!activeElement || activeElement.type == selectedType || !(selectedType & MPElementTypeClassGenerated))
return;
@ -421,9 +421,9 @@
self.siteFieldPreventCompletion = NO;
}
- (MPElementEntity *)activeElementForThread {
- (MPElementEntity *)activeElementForMainThread {
return [self activeElementInContext:[MPMacAppDelegate managedObjectContextForThreadIfReady]];
return [self activeElementInContext:[MPMacAppDelegate managedObjectContextForMainThreadIfReady]];
}
- (MPElementEntity *)activeElementInContext:(NSManagedObjectContext *)moc {
@ -453,9 +453,9 @@
NSString *siteName = [self.siteField stringValue];
[self.progressView startAnimation:nil];
[self.backgroundQueue addOperationWithBlock:^{
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
BOOL actionHandled = NO;
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementInContext:context];
NSString *content = [activeElement.content description];
NSString *typeName = [activeElement typeShortName];
if (!content)

View File

@ -28,15 +28,15 @@
NSAssert([[NSThread currentThread] isMainThread], @"The fetchedResultsController must be accessed from the main thread.");
if (!_fetchedResultsControllerByLastUsed) {
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForThreadIfReady];
if (!mainContext)
NSManagedObjectContext *context = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
if (!context)
return nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )];
fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:NSStringFromSelector( @selector(lastUsed) ) ascending:NO] ];
[self configureFetchRequest:fetchRequest];
_fetchedResultsControllerByLastUsed = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil];
initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsControllerByLastUsed.delegate = self;
}
@ -48,15 +48,15 @@
NSAssert([[NSThread currentThread] isMainThread], @"The fetchedResultsController must be accessed from the main thread.");
if (!_fetchedResultsControllerByUses) {
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForThreadIfReady];
if (!mainContext)
NSManagedObjectContext *context = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
if (!context)
return nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:NSStringFromClass( [MPElementEntity class] )];
fetchRequest.sortDescriptors = @[ [[NSSortDescriptor alloc] initWithKey:NSStringFromSelector( @selector(uses_) ) ascending:NO] ];
[self configureFetchRequest:fetchRequest];
_fetchedResultsControllerByUses = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest managedObjectContext:mainContext sectionNameKeyPath:nil cacheName:nil];
initWithFetchRequest:fetchRequest managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
_fetchedResultsControllerByUses.delegate = self;
}
@ -78,7 +78,7 @@
- (void)updateData {
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForThread];
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserInContext:self.fetchedResultsControllerByLastUsed.managedObjectContext];
if (!activeUser) {
_fetchedResultsControllerByLastUsed = nil;
_fetchedResultsControllerByUses = nil;

View File

@ -193,7 +193,7 @@
NSString *query = [self.searchDisplayController.searchBar.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
cell.textLabel.text = query;
cell.detailTextLabel.text = PearlString( @"New site: %@",
[MPAlgorithmDefault shortNameOfType:[[[MPiOSAppDelegate get] activeUserForThread] defaultType]] );
[MPAlgorithmDefault shortNameOfType:[[[MPiOSAppDelegate get] activeUserForMainThread] defaultType]] );
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

View File

@ -83,7 +83,7 @@
}];
[[NSNotificationCenter defaultCenter] addObserverForName:MPElementUpdatedNotification object:nil queue:nil usingBlock:
^void(NSNotification *note) {
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (activeElement.type & MPElementTypeClassStored && ![[activeElement.content description] length])
[self showToolTip:@"Tap to set a password." withIcon:self.toolTipEditIcon];
if (activeElement.requiresExplicitMigration)
@ -109,7 +109,7 @@
}];
[[NSNotificationCenter defaultCenter] addObserverForName:USMStoreDidChangeNotification object:nil queue:nil usingBlock:
^(NSNotification *note) {
if (!self.activeElementForThread)
if (!self.activeElementForMainThread)
[self didSelectElement:nil];
}];
@ -118,8 +118,8 @@
- (void)viewWillAppear:(BOOL)animated {
MPElementEntity *activeElement = [self activeElementForThread];
if (activeElement.user != [[MPiOSAppDelegate get] activeUserForThread])
MPElementEntity *activeElement = [self activeElementForMainThread];
if (activeElement.user != [[MPiOSAppDelegate get] activeUserForMainThread])
_activeElementOID = nil;
self.searchDisplayController.searchBar.text = nil;
@ -197,7 +197,7 @@
return;
}
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
[self setHelpChapter:activeElement? @"2": @"1"];
[self updateHelpHiddenAnimated:NO];
@ -358,7 +358,7 @@
- (void)webViewDidFinishLoad:(UIWebView *)webView {
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
NSString *error = [self.helpView stringByEvaluatingJavaScriptFromString:
PearlString( @"setClass('%@');", activeElement.typeClassName )];
if (error.length)
@ -464,7 +464,7 @@
- (IBAction)copyContent {
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
id content = activeElement.content;
if (!content)
// Nothing to copy.
@ -484,7 +484,7 @@
- (IBAction)copyLoginName:(UITapGestureRecognizer *)sender {
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (!activeElement.loginName)
return;
@ -531,7 +531,7 @@
if (sender.state != UIGestureRecognizerStateBegan)
// Only fire when the gesture was first detected.
return;
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (![activeElement isKindOfClass:[MPElementGeneratedEntity class]]) {
// Not of a type that supports a password counter.
err(@"Cannot reset password counter: Element is not generated: %@", activeElement.name);
@ -563,7 +563,7 @@
// Only fire when the gesture was first detected.
return;
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (!activeElement)
return;
@ -621,9 +621,9 @@
}];
}
- (MPElementEntity *)activeElementForThread {
- (MPElementEntity *)activeElementForMainThread {
return [self activeElementInContext:[MPiOSAppDelegate managedObjectContextForThreadIfReady]];
return [self activeElementInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
}
- (MPElementEntity *)activeElementInContext:(NSManagedObjectContext *)moc {
@ -641,7 +641,7 @@
- (IBAction)editPassword {
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (!(activeElement.type & MPElementTypeClassStored)) {
// Not of a type that supports editing the content.
err(@"Cannot edit content: Element is not stored: %@", activeElement.name);
@ -659,7 +659,7 @@
- (IBAction)upgradePassword {
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (!activeElement)
return;
@ -779,7 +779,7 @@
- (MPElementEntity *)selectedElement {
return [self activeElementForThread];
return [self activeElementForMainThread];
}
- (void)didSelectType:(MPElementType)type {
@ -855,7 +855,7 @@
if (textField == self.contentField) {
self.contentField.enabled = NO;
MPElementEntity *activeElement = [self activeElementForThread];
MPElementEntity *activeElement = [self activeElementForMainThread];
if (![activeElement isKindOfClass:[MPElementStoredEntity class]]) {
// Not of a type whose content can be edited.
err(@"Cannot update element content: Element is not stored: %@", activeElement.name);

View File

@ -53,7 +53,7 @@
}];
}
} options:0];
avatar.selected = (a == [[MPiOSAppDelegate get] activeUserForThread].avatar);
avatar.selected = (a == [[MPiOSAppDelegate get] activeUserForMainThread].avatar);
}
[super viewDidLoad];
@ -70,7 +70,7 @@
}
} recurse:NO];
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForThread];
MPUserEntity *activeUser = [[MPiOSAppDelegate get] activeUserForMainThread];
self.savePasswordSwitch.on = activeUser.saveKey;
self.defaultTypeLabel.text = [[MPiOSAppDelegate get].key.algorithm shortNameOfType:activeUser.defaultType];
@ -154,7 +154,7 @@
- (MPElementType)selectedType {
return [[MPiOSAppDelegate get] activeUserForThread].defaultType;
return [[MPiOSAppDelegate get] activeUserForMainThread].defaultType;
}
#pragma mark - IBActions

View File

@ -73,7 +73,7 @@
MPElementType selectedType = selectedElement? selectedElement.type: [self.delegate selectedType];
cell.selected = (selectedType == cellType);
if (cellType != NSNotFound && cellType & MPElementTypeClassGenerated) {
if (cellType != (MPElementType)NSNotFound && cellType & MPElementTypeClassGenerated) {
[(UITextField *)[cell viewWithTag:2] setText:@"..."];
NSString *name = selectedElement.name;
@ -99,7 +99,7 @@
assert(self.navigationController.topViewController == self);
MPElementType type = [self typeAtIndexPath:indexPath];
if (type == NSNotFound)
if (type == (MPElementType)NSNotFound)
// Selected a non-type row.
return;

View File

@ -369,11 +369,11 @@
NSAssert([[NSThread currentThread] isMainThread], @"User selection should only be toggled from the main thread.");
NSManagedObjectContext *mainContext = [MPiOSAppDelegate managedObjectContextForThreadIfReady];
MPUserEntity *selectedUser = [self selectedUserInContext:mainContext];
NSManagedObjectContext *context = [MPiOSAppDelegate managedObjectContextForMainThreadIfReady];
MPUserEntity *selectedUser = [self selectedUserInContext:context];
if (!selectedUser)
[self.passwordField resignFirstResponder];
else if ([[MPiOSAppDelegate get] signInAsUser:selectedUser saveInContext:mainContext usingMasterPassword:nil]) {
else if ([[MPiOSAppDelegate get] signInAsUser:selectedUser saveInContext:context usingMasterPassword:nil]) {
[self performSegueWithIdentifier:@"MP_Unlock" sender:self];
return;
}
@ -556,7 +556,7 @@
UIButton *targetedAvatar = selectedAvatar;
if (!targetedAvatar) {
targetedAvatar = [self findTargetedAvatar];
targetedUser = [self userForAvatar:targetedAvatar inContext:[MPiOSAppDelegate managedObjectContextForThreadIfReady]];
targetedUser = [self userForAvatar:targetedAvatar inContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
}
[self.avatarsView enumerateSubviews:^(UIView *subview, BOOL *stop, BOOL *recurse) {
@ -1140,7 +1140,7 @@
- (MPUserEntity *)selectedUserForThread {
return [self selectedUserInContext:[MPiOSAppDelegate managedObjectContextForThreadIfReady]];
return [self selectedUserInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]];
}
- (MPUserEntity *)selectedUserInContext:(NSManagedObjectContext *)moc {

View File

@ -491,7 +491,7 @@
- (void)openFeedbackWithLogs:(BOOL)logs forVC:(UIViewController *)viewController {
NSString *userName = [[MPiOSAppDelegate get] activeUserForThread].name;
NSString *userName = [[MPiOSAppDelegate get] activeUserForMainThread].name;
PearlLogLevel logLevel = PearlLogLevelInfo;
if (logs && ([[MPiOSConfig get].sendInfo boolValue] || [[MPiOSConfig get].traceMode boolValue]))
logLevel = PearlLogLevelDebug;
@ -566,7 +566,7 @@
@"--\n"
@"%@\n"
@"Master Password %@, build %@",
[self activeUserForThread].name,
[self activeUserForMainThread].name,
[PearlInfoPlist get].CFBundleShortVersionString,
[PearlInfoPlist get].CFBundleVersion );
else
@ -574,7 +574,7 @@
@"--\n"
@"%@\n"
@"Master Password %@, build %@",
[self activeUserForThread].name,
[self activeUserForMainThread].name,
[PearlInfoPlist get].CFBundleShortVersionString,
[PearlInfoPlist get].CFBundleVersion );
@ -584,7 +584,7 @@
[PearlEMail sendEMailTo:nil subject:@"Master Password Export" body:message
attachments:[[PearlEMailAttachment alloc] initWithContent:[exportedSites dataUsingEncoding:NSUTF8StringEncoding]
mimeType:@"text/plain" fileName:
PearlString( @"%@ (%@).mpsites", [self activeUserForThread].name,
PearlString( @"%@ (%@).mpsites", [self activeUserForMainThread].name,
[exportDateFormatter stringFromDate:[NSDate date]] )],
nil];
}

View File

@ -230,7 +230,6 @@
DABD3C201711E2DC00CF925C /* MPUnlockViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BEF1711E2DC00CF925C /* MPUnlockViewController.m */; };
DABD3C211711E2DC00CF925C /* MPiOSConfig.m in Sources */ = {isa = PBXBuildFile; fileRef = DABD3BF11711E2DC00CF925C /* MPiOSConfig.m */; };
DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF21711E2DC00CF925C /* MainStoryboard_iPhone.storyboard */; };
DABD3C231711E2DC00CF925C /* MasterPassword-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF31711E2DC00CF925C /* MasterPassword-Info.plist */; };
DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF81711E2DC00CF925C /* MasterPassword.entitlements */; };
DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BF91711E2DC00CF925C /* Settings.bundle */; };
DABD3C261711E2DC00CF925C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = DABD3BFA1711E2DC00CF925C /* InfoPlist.strings */; };
@ -3258,7 +3257,7 @@
isa = PBXProject;
attributes = {
CLASSPREFIX = MP;
LastUpgradeCheck = 0460;
LastUpgradeCheck = 0500;
ORGANIZATIONNAME = Lyndir;
};
buildConfigurationList = DA5BFA3E147E415C00F98B1E /* Build configuration list for PBXProject "MasterPassword-iOS" */;
@ -3517,7 +3516,6 @@
DABD3B9E1711E29800CF925C /* social-twitter@2x.png in Resources */,
DABD3C191711E2DC00CF925C /* MPElementListCellView.xib in Resources */,
DABD3C221711E2DC00CF925C /* MainStoryboard_iPhone.storyboard in Resources */,
DABD3C231711E2DC00CF925C /* MasterPassword-Info.plist in Resources */,
DABD3C241711E2DC00CF925C /* MasterPassword.entitlements in Resources */,
DABD3C251711E2DC00CF925C /* Settings.bundle in Resources */,
DABD3C261711E2DC00CF925C /* InfoPlist.strings in Resources */,
@ -3857,7 +3855,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MasterPassword.app/MasterPassword";
CLANG_ENABLE_OBJC_ARC = YES;
COPY_PHASE_STRIP = YES;
@ -3887,7 +3884,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MasterPassword.app/MasterPassword";
CLANG_ENABLE_OBJC_ARC = YES;
COPY_PHASE_STRIP = YES;
@ -3971,7 +3967,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CXX0X_EXTENSIONS = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@ -4041,7 +4036,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CXX0X_EXTENSIONS = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;
@ -4166,7 +4160,6 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = "$(ARCHS_STANDARD_32_BIT)";
CLANG_WARN_CXX0X_EXTENSIONS = YES;
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
CLANG_WARN_EMPTY_BODY = YES;