From 9e095653658f37d5c7ecc73c0c528e14745473fc Mon Sep 17 00:00:00 2001 From: michael starke Date: Wed, 31 Aug 2016 18:26:46 +0200 Subject: [PATCH] Recovery attempt for save without password now also adheres to cancel --- MacPass/MPErrorRecoveryAttempter.m | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/MacPass/MPErrorRecoveryAttempter.m b/MacPass/MPErrorRecoveryAttempter.m index 315986b7..2edf8d04 100644 --- a/MacPass/MPErrorRecoveryAttempter.m +++ b/MacPass/MPErrorRecoveryAttempter.m @@ -21,18 +21,28 @@ */ - (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(nullable id)delegate didRecoverSelector:(nullable SEL)didRecoverSelector contextInfo:(nullable void *)contextInfo { NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[delegate methodSignatureForSelector:didRecoverSelector]]; - + __block void *contextInfoCopy = contextInfo; if(error.code == MPErrorNoPasswordOrKeyFile) { if([delegate isKindOfClass:[MPDocument class]]) { MPDocument *document = delegate; - [document.windowControllers.firstObject editPasswordWithCompetionHandler:^(NSInteger result) { - BOOL didRecover = result == NSModalResponseOK; + BOOL didRecover = NO; + if(recoveryOptionIndex == 0) { + [document.windowControllers.firstObject editPasswordWithCompetionHandler:^(NSInteger result) { + BOOL didRecover = result == NSModalResponseOK; + invocation.target = delegate; + invocation.selector = didRecoverSelector; + [invocation setArgument:&didRecover atIndex:2]; + [invocation setArgument:&contextInfoCopy atIndex:3]; + [invocation invoke]; + }]; + } + else { invocation.target = delegate; invocation.selector = didRecoverSelector; [invocation setArgument:&didRecover atIndex:2]; [invocation setArgument:&contextInfo atIndex:3]; [invocation invoke]; - }]; + } } }