Revision: 28986
http://sourceforge.net/p/bibdesk/svn/28986
Author: hofman
Date: 2025-02-06 15:42:20 +0000 (Thu, 06 Feb 2025)
Log Message:
-----------
suspend import command when waiting and parsing async
Modified Paths:
--------------
trunk/bibdesk/BibDocument+Scripting.m
Modified: trunk/bibdesk/BibDocument+Scripting.m
===================================================================
--- trunk/bibdesk/BibDocument+Scripting.m 2025-01-22 10:12:22 UTC (rev
28985)
+++ trunk/bibdesk/BibDocument+Scripting.m 2025-02-06 15:42:20 UTC (rev
28986)
@@ -1041,7 +1041,6 @@
id mergePub = [params objectForKey:@"merge"];
id overwrite = [params objectForKey:@"overwrite"];
BOOL synchronous = [wait respondsToSelector:@selector(boolValue)] ? [wait
boolValue] : (mergePub == nil);
- NSArray *pubs = nil;
BDSKServerInfo *serverInfo = nil;
// make sure we get something valid as input
@@ -1112,7 +1111,9 @@
}
}
- __block BOOL canceled = NO;
+ __block BOOL finished = NO;
+ __block BOOL suspended = NO;
+ __block NSArray *returnPubs = nil;
// construct the handler to process the pubs when we get them
void (^handler)(NSArray *) = NULL;
@@ -1132,17 +1133,25 @@
[mergeController merge];
} else if ([overwrite unsignedIntValue] == 'yes ') {
[mergeController mergeOverwriting];
- } else if (synchronous == NO) {
- [mergeController beginSheetModalForWindow:documentWindow
completionHandler:NULL];
} else {
- [mergeController beginSheetModalForWindow:documentWindow
completionHandler:^(NSInteger rv){
- [NSApp stopModalWithCode:rv];
+ [mergeController beginSheetModalForWindow:documentWindow
completionHandler:^(NSModalResponse rv){
+ if (rv == NSModalResponseOK)
+ returnPubs = @[mergePub];
+ else
+ returnPubs = @[];
+ if (suspended)
+ [command resumeExecutionWithResult:returnPubs];
+ finished = YES;
}];
- canceled = NSModalResponseCancel == [NSApp
runModalForWindow:[mergeController window]];
+ return;
}
+ returnPubs = @[mergePub];
} else {
- canceled = YES;
+ returnPubs = @[];
}
+ if (suspended)
+ [command resumeExecutionWithResult:returnPubs];
+ finished = YES;
};
} else {
handler = ^(NSArray *result){
@@ -1158,6 +1167,10 @@
}
[self importPublications:result publicationsToAutoFile:([url
isFileURL] ? result : nil) options:BDSKImportAggregate | BDSKImportNoEdit];
}
+ returnPubs = result ?: @[];
+ if (suspended)
+ [command resumeExecutionWithResult:returnPubs];
+ finished = YES;
};
}
@@ -1164,40 +1177,37 @@
// finally get the pubs and process them
if ([source isKindOfClass:[NSArray class]]) {
NSMutableArray *tmpPubs = [NSMutableArray array];
- for (BibItem *pub in source) {
+ for (BibItem *pub in source)
// get complex strings with the correct macroResolver
- BibItem *copiedPub = [pub copyWithMacroResolver:[self
macroResolver]];
- [tmpPubs addObject:copiedPub];
- }
- pubs = tmpPubs;
+ [tmpPubs addObject:[pub copyWithMacroResolver:[self
macroResolver]]];
+ handler(tmpPubs);
} else if ([source isKindOfClass:[NSString class]]) {
- if (synchronous == NO && [BDSKDOIParser canParseString:source]) {
+ if ([BDSKDOIParser canParseString:source])
[BDSKDOIParser itemsFromString:source owner:self
completionHandler:handler];
- return nil;
- }
- pubs = [BDSKStringParser itemsFromString:source
ofType:BDSKStringTypeUnknown owner:self error:NULL];
+ else
+ handler([BDSKStringParser itemsFromString:source
ofType:BDSKStringTypeUnknown owner:self error:NULL]);
} else if ([source isKindOfClass:[NSURL class]]) {
- pubs = [BDSKWebSearch itemsFromURL:source macroResolver:[self
macroResolver] completionHandler:synchronous ? nil : handler];
- if (synchronous == NO)
- return nil;
+ [BDSKWebSearch itemsFromURL:source macroResolver:[self macroResolver]
completionHandler:handler];
} else if (searchTerm) {
- pubs = [BDSKGroupSearch searchUsingSearchTerm:searchTerm
serverInfo:serverInfo macroResolver:[self macroResolver]
completionHandler:synchronous ? nil : handler];
- if (synchronous == NO)
- return nil;
+ [BDSKGroupSearch searchUsingSearchTerm:searchTerm
serverInfo:serverInfo macroResolver:[self macroResolver]
completionHandler:handler];
+ } else if ([url isFileURL]) {
+ handler(@[[BibItem itemWithFileURL:url owner:self]]);
} else if (url) {
- if ([url isFileURL])
- pubs = @[[BibItem itemWithFileURL:url owner:self]];
- else
- pubs = @[[BibItem itemWithURL:url title:nil owner:self]];
+ handler(@[[BibItem itemWithURL:url title:nil owner:self]]);
+ } else {
+ returnPubs = @[];
+ finished = YES;
}
- handler(pubs);
- if (synchronous == NO)
+ if (synchronous == NO) {
return nil;
- else if (mergePub == nil)
- return pubs ?: @[];
- else
- return [NSArray arrayWithObjects:canceled ? nil : mergePub, nil];
+ } else if (finished) {
+ return returnPubs;
+ } else {
+ [command suspendExecution];
+ suspended = YES;
+ return nil;
+ }
}
@end
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
Bibdesk-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit