Thanks. I made changes to fix these bugs, though in completely different places from your patches. Please test them in the next nightly build.
Christiaan On 3 Jun 2008, at 8:35 AM, Colin A. Smith wrote: > Hello- > > I've been trying to create/use search groups with AppleScript and have > run into several bugs and/or unexpected behavior. The modified files, > current as of revision 13371, are here: > > http://zinc.ucsf.edu/~colin/BibDeskAppleScriptPatch > > The diffs as well as per-file commentary are below. > > Cheers. > > -Colin > > ******************************************************************************** > When search groups are created via AppleScript, the no-argument init > method is > called. Because the searchIndexes initializer lived in the more > specialized init > methods, it never got called leading to thrown exceptions as soon as a > search > was initiated. This fixes that problem. > > Also, in version 1.3.17, if search groups were deleted while a search > was in > progress, the server would have an EXEC_BAD_ACCESS trying to add the > publications to the already deallocated publications array. Changing > the order > in the dealloc method appears to fix this problem in my testing. I'm > not sure > that this is 100%, but I haven't been able to get it to fail since I > made the > switch. There is a slight UI hiccup where the group selection changes > as the > deallocation occurs. There must be some notification getting fired but > I haven't > tracked that down. Anyway, not crashing is a good step in the right > direction. > ******************************************************************************** > > Index: BDSKSearchGroup.m > =================================================================== > --- BDSKSearchGroup.m (revision 13371) > +++ BDSKSearchGroup.m (working copy) > @@ -55,6 +55,13 @@ > > @implementation BDSKSearchGroup > > +- (id)init; > +{ > + return [self initWithType:BDSKSearchGroupEntrez > + serverInfo:[BDSKServerInfo > defaultServerInfoWithType:BDSKSearchGroupEntrez] > + searchTerm:nil]; > +} > + > - (id)initWithType:(NSString *)typeName name:(NSString *)aName; > { > return [self initWithType:typeName serverInfo:[NSDictionary > dictionaryWithObject:aName forKey:@"database"] searchTerm:nil]; > @@ -198,11 +205,12 @@ > > - (void)dealloc > { > + // first terminate/release the server so it doesn't try to access > objects that will be released > + [server terminate]; > + [server release]; > [[NSNotificationCenter defaultCenter] removeObserver:self]; > [publications makeObjectsPerformSelector:@selector(setOwner:) > withObject:nil]; > [publications release]; > - [server terminate]; > - [server release]; > [type release]; > [searchTerm release]; > [searchIndexes release]; > > ******************************************************************************** > AppleScript commands that changed search group settings previously > would cause > the undo manager to think that the document changed, erroneously > prompting the > user to save the document when search groups are only temporary. > > The other change made was to automatically trigger a search if an > AppleScript > command changes either the serverInfo or searchTerm (and the other > piece of data > is already set). > > Finally, there was a bug that made it impossible to change the server > type through > AppleScript. Also fixed. > ******************************************************************************** > > Index: BDSKGroup+Scripting.m > =================================================================== > --- BDSKGroup+Scripting.m (revision 13371) > +++ BDSKGroup+Scripting.m (working copy) > @@ -425,7 +425,12 @@ > } > > - (void)setScriptingSearchTerm:(NSString *)newSerachTerm { > + [[self undoManager] disableUndoRegistration]; > [self setSearchTerm:newSerachTerm]; > + [[self undoManager] enableUndoRegistration]; > + // execute the search if the server info is available > + if ([self scriptingServerInfo]) > + [self search]; > } > > - (NSDictionary *)scriptingServerInfo { > @@ -481,7 +486,7 @@ > NSString *host = [info valueForKey:@"host"]; > NSString *port = [info valueForKey:@"port"]; > > - if ([[serverInfo type] isEqualToString:type]) { > + if ([[serverInfo type] isEqualToString:serverType]) { > serverInfo = [[self serverInfo] mutableCopy]; > > NSString *value; > @@ -538,8 +543,12 @@ > } > > if (isValid) { > + [[self undoManager] disableUndoRegistration]; > [self setServerInfo:serverInfo]; > - [[self undoManager] > setActionName:NSLocalizedString(@"AppleScript",@"Undo action name for > AppleScript")]; > + [[self undoManager] enableUndoRegistration]; > + // execute the search if the search term is set > + if ([self searchTerm] && [[self searchTerm] length] > 0) > + [self search]; > } else { > NSScriptCommand *cmd = [NSScriptCommand currentCommand]; > [cmd > setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; > > ******************************************************************************** > The make new AppleScript command also triggers the undo mananger. > Fixing that as > well. > ******************************************************************************** > > Index: BibDocument+Scripting.m > =================================================================== > --- BibDocument+Scripting.m (revision 13371) > +++ BibDocument+Scripting.m (working copy) > @@ -463,8 +463,9 @@ > [cmd > setScriptErrorNumber:NSReceiversCantHandleCommandScriptError]; > [cmd setScriptErrorString:NSLocalizedString(@"Cannot add > group.",@"Error description")]; > } else { > + [[self undoManager] disableUndoRegistration]; > [groups addSearchGroup:group]; > - [[self undoManager] > setActionName:NSLocalizedString(@"AppleSearch",@"Undo action name for > AppleSearch")]; > + [[self undoManager] enableUndoRegistration]; > } > } > > @@ -473,7 +474,9 @@ > } > > - (void)removeObjectFromSearchGroupsAtIndex:(unsigned int)idx { > + [[self undoManager] disableUndoRegistration]; > [groups removeSearchGroup:[[groups searchGroups] > objectAtIndex:idx]]; > + [[self undoManager] enableUndoRegistration]; > [[self undoManager] > setActionName:NSLocalizedString(@"AppleSearch",@"Undo action name for > AppleSearch")]; > } > > ******************************************************************************** > The import script hook wasn't getting called when clicking the > "import" button > in search group table lines. This enables that. > ******************************************************************************** > > Index: BibDocument_Groups.m > =================================================================== > --- BibDocument_Groups.m (revision 13371) > +++ BibDocument_Groups.m (working copy) > @@ -82,6 +82,7 @@ > #import "BDSKSearchButtonController.h" > #import "BDSKSharingClient.h" > #import "WebURLsWithTitles.h" > +#import "BDSKScriptHookManager.h" > > > @implementation BibDocument (Groups) > @@ -1483,6 +1484,8 @@ > [self generateCiteKeysForPublications:generatePubs]; > > [groups setLastImportedPublications:newPubs]; > + > + [[BDSKScriptHookManager sharedManager] > runScriptHookWithName:BDSKImportPublicationsScriptHookName > forPublications:newPubs document:self]; > > [[self undoManager] setActionName:NSLocalizedString(@"Merge > External Publications", @"Undo action name")]; > > @@ -1842,6 +1845,8 @@ > [self generateCiteKeysForPublications:generatePubs]; > > [groups setLastImportedPublications:newPubs]; > + > + [[BDSKScriptHookManager sharedManager] > runScriptHookWithName:BDSKImportPublicationsScriptHookName > forPublications:newPubs document:self]; > > [[self undoManager] setActionName:NSLocalizedString(@"Import > Publication", @"Undo action name")]; > } > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > Bibdesk-develop mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/bibdesk-develop ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Bibdesk-develop mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/bibdesk-develop
