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

Reply via email to