Revision: 27224
          http://sourceforge.net/p/bibdesk/svn/27224
Author:   hofman
Date:     2022-01-16 16:10:06 +0000 (Sun, 16 Jan 2022)
Log Message:
-----------
Always set teh receiver specifier of the auto file command to the publication

Modified Paths:
--------------
    trunk/bibdesk/BDSKAutoFileCommand.h
    trunk/bibdesk/BDSKAutoFileCommand.m

Modified: trunk/bibdesk/BDSKAutoFileCommand.h
===================================================================
--- trunk/bibdesk/BDSKAutoFileCommand.h 2022-01-09 16:11:25 UTC (rev 27223)
+++ trunk/bibdesk/BDSKAutoFileCommand.h 2022-01-16 16:10:06 UTC (rev 27224)
@@ -40,7 +40,7 @@
 
 
 @interface BDSKAutoFileCommand : NSScriptCommand {
-
+    NSScriptObjectSpecifier *keySpecifier;
 }
-
+@property (nonatomic, readonly) NSScriptObjectSpecifier *keySpecifier;
 @end

Modified: trunk/bibdesk/BDSKAutoFileCommand.m
===================================================================
--- trunk/bibdesk/BDSKAutoFileCommand.m 2022-01-09 16:11:25 UTC (rev 27223)
+++ trunk/bibdesk/BDSKAutoFileCommand.m 2022-01-16 16:10:06 UTC (rev 27224)
@@ -48,9 +48,25 @@
 
 @implementation BDSKAutoFileCommand
 
+@synthesize keySpecifier;
+
+- (void)dealloc {
+    BDSKDESTROY(keySpecifier);
+    [super dealloc];
+}
+
+- (void)setReceiversSpecifier:(NSScriptObjectSpecifier *)receiversSpecifier {
+    if ([[[receiversSpecifier keyClassDescription] className] 
isEqualToString:@"publication"]) {
+        [super setReceiversSpecifier:receiversSpecifier];
+    } else {
+        [super setReceiversSpecifier:[receiversSpecifier containerSpecifier]];
+        keySpecifier = [receiversSpecifier retain];
+    }
+}
+
 - (id)performDefaultImplementation {
-    NSScriptObjectSpecifier *receiverSpec = [self receiversSpecifier];
-    NSString *receiverClass = [[receiverSpec keyClassDescription] className];
+    NSScriptObjectSpecifier *keySpec = [self keySpecifier];
+    NSString *keyClass = [[keySpec keyClassDescription] className];
     NSDictionary *params = [self evaluatedArguments];
     NSNumber *indexNumber = [params objectForKey:@"index"];
     NSString *location = [params objectForKey:@"to"];
@@ -57,7 +73,7 @@
     NSString *field = [params objectForKey:@"for"];
     NSNumber *checkNumber = [params objectForKey:@"check"];
     BOOL check = checkNumber ? [checkNumber boolValue] : YES;
-    BibItem *pub = nil;
+    BibItem *pub = [self evaluatedReceivers];
     BibDocument *doc = nil;
     NSInteger start = 0, end = 0;
     NSMutableIndexSet *indexes = nil;
@@ -72,8 +88,18 @@
         return nil;
     }
     
-    if ([receiverClass isEqualToString:@"publication"]) {
-        pub = [self evaluatedReceivers];
+    if (pub == nil) {
+        [self setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
+        [self setScriptErrorString:@"Could not find a publication to auto 
file."];
+        return nil;
+    }
+    if ([pub isKindOfClass:[BibItem class]] == NO) {
+        [self setScriptErrorNumber:NSArgumentsWrongScriptError];
+        [self setScriptErrorString:@"Receiver is not a publication."];
+        return nil;
+    }
+    
+    if (keySpec == nil) {
         if (indexNumber) {
             if (field && [field isEqualToString:BDSKLocalFileString] == NO) {
                 [self setScriptErrorNumber:NSArgumentsWrongScriptError];
@@ -90,7 +116,7 @@
         } else {
             field = [field fieldName] ?: BDSKLocalUrlString;
         }
-    } else if ([receiverClass isEqualToString:@"field"]) {
+    } else if ([keyClass isEqualToString:@"field"]) {
         if (field) {
             [self setScriptErrorNumber:NSArgumentsWrongScriptError];
             [self setScriptErrorString:@"Cannot pass both a field and a field 
name."];
@@ -101,14 +127,13 @@
             [self setScriptErrorString:@"Cannot pass both a field and an 
index."];
             return nil;
         }
-        if ([receiverSpec isKindOfClass:[NSNameSpecifier class]] == NO) {
+        if ([keySpec isKindOfClass:[NSNameSpecifier class]] == NO) {
             [self setScriptErrorNumber:NSArgumentsWrongScriptError];
             [self setScriptErrorString:@"Invalid field specifier."];
             return nil;
         }
-        pub = [[receiverSpec containerSpecifier] objectsByEvaluatingSpecifier];
-        field = [[(NSNameSpecifier *)receiverSpec name] fieldName];
-    } else if ([receiverClass isEqualToString:@"linked file"]) {
+        field = [[(NSNameSpecifier *)keySpec name] fieldName];
+    } else if ([keyClass isEqualToString:@"linked file"]) {
         if (field) {
             [self setScriptErrorNumber:NSArgumentsWrongScriptError];
             [self setScriptErrorString:@"Cannot pass both a linked file and a 
field name."];
@@ -120,22 +145,20 @@
             return nil;
         }
         field = BDSKLocalFileString;
-        if ([[receiverSpec key] isEqualToString:@""]) {
+        if ([[keySpec key] isEqualToString:@""]) {
             // this is an 'item i of linked files' specifier
             // -indicesOfObjectsByEvaluatingWithContainer:count: does not work 
here
-            if ([receiverSpec isKindOfClass:[NSIndexSpecifier class]] == NO ||
-                [[receiverSpec containerSpecifier] 
isKindOfClass:[NSPropertySpecifier class]] == NO) {
+            if ([keySpec isKindOfClass:[NSIndexSpecifier class]] == NO ||
+                [[keySpec containerSpecifier] 
isKindOfClass:[NSPropertySpecifier class]] == NO) {
                 [self setScriptErrorNumber:NSArgumentsWrongScriptError];
                 [self setScriptErrorString:@"Do not understand linked file 
specifier."];
                 return nil;
             }
-            pub = [[[receiverSpec containerSpecifier] containerSpecifier] 
objectsByEvaluatingSpecifier];
-            end = start = [(NSIndexSpecifier *)receiverSpec index];
+            end = start = [(NSIndexSpecifier *)keySpec index];
         } else {
-            pub = [[receiverSpec containerSpecifier] 
objectsByEvaluatingSpecifier];
             // NSPropertySpecifier, NSIndexSpecifier, NSRangeSpecifier, 
NSMiddleSpecifier, NSWhoseSpecifier
             NSInteger i, count = -2;
-            NSInteger *indices = [receiverSpec 
indicesOfObjectsByEvaluatingWithContainer:pub count:&count];
+            NSInteger *indices = [keySpec 
indicesOfObjectsByEvaluatingWithContainer:pub count:&count];
             if (count < -1) {
                 [self setScriptErrorNumber:NSArgumentsWrongScriptError];
                 [self setScriptErrorString:@"Do not understand linked file 
specifier."];
@@ -163,21 +186,10 @@
     } else {
         [self setScriptErrorNumber:NSArgumentsWrongScriptError];
         [self setScriptErrorString:@"Receiver should be a publication, field, 
or linked file(s)."];
-        [self setScriptErrorOffendingObjectDescriptor:[receiverSpec 
descriptor]];
+        [self setScriptErrorOffendingObjectDescriptor:[keySpec descriptor]];
         return nil;
     }
     
-    if (pub == nil) {
-        [self setScriptErrorNumber:NSRequiredArgumentsMissingScriptError];
-        [self setScriptErrorString:@"Could not find a publication to auto 
file."];
-        return nil;
-    }
-    if ([pub isKindOfClass:[BibItem class]] == NO) {
-        [self setScriptErrorNumber:NSArgumentsWrongScriptError];
-        [self setScriptErrorString:@"Receiver is not a publication."];
-        return nil;
-    }
-    
     doc = (BibDocument *)[pub owner];
     
     if ([doc isDocument] == NO) {

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

Reply via email to