Content generation fix.
[UPDATED] For safer MOC usage API. [FIXED] Actually set the active element so that content is generated.
This commit is contained in:
parent
40f34f3d77
commit
9882bf408c
@ -35,8 +35,7 @@ PearlAssociatedObjectProperty(NSManagedObjectContext*, MainManagedObjectContext,
|
|||||||
if ([[NSThread currentThread] isMainThread])
|
if ([[NSThread currentThread] isMainThread])
|
||||||
return mainManagedObjectContext;
|
return mainManagedObjectContext;
|
||||||
|
|
||||||
NSManagedObjectContext
|
NSManagedObjectContext *threadManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
|
||||||
*threadManagedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSConfinementConcurrencyType];
|
|
||||||
threadManagedObjectContext.parentContext = mainManagedObjectContext;
|
threadManagedObjectContext.parentContext = mainManagedObjectContext;
|
||||||
|
|
||||||
return threadManagedObjectContext;
|
return threadManagedObjectContext;
|
||||||
|
@ -66,14 +66,15 @@
|
|||||||
|
|
||||||
- (void)unlock {
|
- (void)unlock {
|
||||||
|
|
||||||
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserForThread];
|
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
|
||||||
|
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserInContext:moc];
|
||||||
if (!activeUser)
|
if (!activeUser)
|
||||||
// No user to sign in with.
|
// No user to sign in with.
|
||||||
return;
|
return;
|
||||||
if ([MPMacAppDelegate get].key)
|
if ([MPMacAppDelegate get].key)
|
||||||
// Already logged in.
|
// Already logged in.
|
||||||
return;
|
return;
|
||||||
if ([[MPMacAppDelegate get] signInAsUser:activeUser usingMasterPassword:nil])
|
if ([[MPMacAppDelegate get] signInAsUser:activeUser saveInContext:moc usingMasterPassword:nil])
|
||||||
// Load the key from the keychain.
|
// Load the key from the keychain.
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -107,7 +108,8 @@
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (contextInfo == MPAlertUnlockMP) {
|
if (contextInfo == MPAlertUnlockMP) {
|
||||||
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserForThread];
|
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
|
||||||
|
MPUserEntity *activeUser = [[MPMacAppDelegate get] activeUserInContext:moc];
|
||||||
switch (returnCode) {
|
switch (returnCode) {
|
||||||
case NSAlertAlternateReturn:
|
case NSAlertAlternateReturn:
|
||||||
// "Change" button.
|
// "Change" button.
|
||||||
@ -126,6 +128,7 @@
|
|||||||
activeUser.keyID = nil;
|
activeUser.keyID = nil;
|
||||||
[[MPMacAppDelegate get] forgetSavedKeyFor:activeUser];
|
[[MPMacAppDelegate get] forgetSavedKeyFor:activeUser];
|
||||||
[[MPMacAppDelegate get] signOutAnimated:YES];
|
[[MPMacAppDelegate get] signOutAnimated:YES];
|
||||||
|
[moc saveToStore];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -140,25 +143,30 @@
|
|||||||
self.contentContainer.alphaValue = 0;
|
self.contentContainer.alphaValue = 0;
|
||||||
[self.progressView startAnimation:nil];
|
[self.progressView startAnimation:nil];
|
||||||
self.inProgress = YES;
|
self.inProgress = YES;
|
||||||
dispatch_async( dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_LOW, 0 ), ^{
|
[MPMacAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *moc) {
|
||||||
BOOL success = [[MPMacAppDelegate get] signInAsUser:activeUser
|
NSError *error = nil;
|
||||||
|
MPUserEntity *activeUser_ = (MPUserEntity *)[moc existingObjectWithID:activeUser.objectID error:&error];
|
||||||
|
if (!activeUser_)
|
||||||
|
err(@"Failed to retrieve active use while logging in: %@", error);
|
||||||
|
|
||||||
|
BOOL success = [[MPMacAppDelegate get] signInAsUser:activeUser saveInContext:moc
|
||||||
usingMasterPassword:[(NSSecureTextField *)alert.accessoryView stringValue]];
|
usingMasterPassword:[(NSSecureTextField *)alert.accessoryView stringValue]];
|
||||||
self.inProgress = NO;
|
self.inProgress = NO;
|
||||||
|
|
||||||
dispatch_async( dispatch_get_main_queue(), ^{
|
dispatch_async( dispatch_get_main_queue(), ^{
|
||||||
[self.progressView stopAnimation:nil];
|
[self.progressView stopAnimation:nil];
|
||||||
|
|
||||||
if (success)
|
if (success)
|
||||||
self.contentContainer.alphaValue = 1;
|
self.contentContainer.alphaValue = 1;
|
||||||
else {
|
else {
|
||||||
[[NSAlert alertWithError:[NSError errorWithDomain:MPErrorDomain code:0 userInfo:@{
|
[[NSAlert alertWithError:[NSError errorWithDomain:MPErrorDomain code:0 userInfo:@{
|
||||||
NSLocalizedDescriptionKey : PearlString( @"Incorrect master password for user %@",
|
NSLocalizedDescriptionKey : PearlString( @"Incorrect master password for user %@",
|
||||||
activeUser.name )
|
activeUser.name )
|
||||||
}]] beginSheetModalForWindow:self.window modalDelegate:self
|
}]] beginSheetModalForWindow:self.window modalDelegate:self
|
||||||
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:MPAlertIncorrectMP];
|
didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:) contextInfo:MPAlertIncorrectMP];
|
||||||
}
|
}
|
||||||
} );
|
} );
|
||||||
} );
|
}];
|
||||||
}
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
@ -185,10 +193,10 @@
|
|||||||
|
|
||||||
NSError *error = nil;
|
NSError *error = nil;
|
||||||
NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error];
|
NSArray *siteResults = [context executeFetchRequest:fetchRequest error:&error];
|
||||||
if (error)
|
if (!siteResults)
|
||||||
err(@"While fetching elements for completion: %@", error);
|
err(@"While fetching elements for completion: %@", error);
|
||||||
|
else if ([siteResults count]) {
|
||||||
if (siteResults) {
|
_activeElementOID = ((NSManagedObject *)[siteResults objectAtIndex:0]).objectID;
|
||||||
for (MPElementEntity *element in siteResults)
|
for (MPElementEntity *element in siteResults)
|
||||||
[mutableResults addObject:element.name];
|
[mutableResults addObject:element.name];
|
||||||
//[mutableResults addObject:query]; // For when the app should be able to create new sites.
|
//[mutableResults addObject:query]; // For when the app should be able to create new sites.
|
||||||
@ -220,9 +228,6 @@
|
|||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)copyContents {
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)controlTextDidEndEditing:(NSNotification *)note {
|
- (void)controlTextDidEndEditing:(NSNotification *)note {
|
||||||
|
|
||||||
if (note.object != self.siteField)
|
if (note.object != self.siteField)
|
||||||
@ -296,7 +301,8 @@
|
|||||||
if (![[NSPasteboard generalPasteboard] setString:content forType:NSPasteboardTypeString]) {
|
if (![[NSPasteboard generalPasteboard] setString:content forType:NSPasteboardTypeString]) {
|
||||||
wrn(@"Couldn't copy password to pasteboard.");
|
wrn(@"Couldn't copy password to pasteboard.");
|
||||||
return;
|
return;
|
||||||
}
|
} else
|
||||||
|
dbg(@"Copied: %@", content);
|
||||||
|
|
||||||
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
|
NSManagedObjectContext *moc = [MPMacAppDelegate managedObjectContextForThreadIfReady];
|
||||||
MPElementEntity *activeElement = [self activeElementInContext:moc];
|
MPElementEntity *activeElement = [self activeElementInContext:moc];
|
||||||
|
Loading…
Reference in New Issue
Block a user