Revision: 27540
          http://sourceforge.net/p/bibdesk/svn/27540
Author:   hofman
Date:     2022-06-03 17:29:20 +0000 (Fri, 03 Jun 2022)
Log Message:
-----------
Change date modified in item using custom setter, avoid parsing the field value 
back to the date

Modified Paths:
--------------
    trunk/bibdesk/BibItem.m

Modified: trunk/bibdesk/BibItem.m
===================================================================
--- trunk/bibdesk/BibItem.m     2022-06-03 16:47:50 UTC (rev 27539)
+++ trunk/bibdesk/BibItem.m     2022-06-03 17:29:20 UTC (rev 27540)
@@ -107,6 +107,8 @@
 - (void)setPubTypeString:(NSString *)newType;
 - (void)setCiteKeyString:(NSString *)newCiteKey;
 
+- (void)setModifiedDate:(NSDate *)date;
+
 // updates derived info from the dictionary
 - (void)updateMetadataForKey:(NSString *)key;
 
@@ -285,9 +287,10 @@
         identifierURL = createUniqueURL();
         
         [self setPubTypeString:type];
-        [self setDate: nil];
-        [self setDateAdded: nil];
-        [self setDateModified: nil];
+        
+        pubDate = nil;
+        dateAdded = nil;
+        dateModified = nil;
                
         filesToBeFiled = nil;
         localUrlNeedsToBeFiled = NO;
@@ -996,11 +999,7 @@
     [oldType retain];
        [self setPubTypeString:newType];
        
-       if (date != nil) {
-               [pubFields setObject:[date standardDescription] 
forKey:BDSKDateModifiedString];
-       } else {
-               [pubFields removeObjectForKey:BDSKDateModifiedString];
-       }
+    [self setModifiedDate:date];
        [self updateMetadataForKey:BDSKPubTypeString];
                
     NSDictionary *notifInfo = [NSDictionary 
dictionaryWithObjectsAndKeys:BDSKPubTypeString, BDSKBibItemKeyKey, newType, 
BDSKBibItemNewValueKey, oldType, BDSKBibItemOldValueKey, nil];
@@ -1048,11 +1047,7 @@
     }
        
     [self setCiteKeyString:newCiteKey];
-       if (date != nil) {
-               [pubFields setObject:[date standardDescription] 
forKey:BDSKDateModifiedString];
-       } else {
-               [pubFields removeObjectForKey:BDSKDateModifiedString];
-       }
+    [self setModifiedDate:date];
        [self updateMetadataForKey:BDSKCiteKeyString];
                
     NSDictionary *notifInfo = [NSDictionary 
dictionaryWithObjectsAndKeys:BDSKCiteKeyString, BDSKBibItemKeyKey, newCiteKey, 
BDSKBibItemNewValueKey, oldCiteKey, BDSKBibItemOldValueKey, nil];
@@ -1202,7 +1197,7 @@
     // to allow autocomplete:
     if (value)
                [[BDSKCompletionManager sharedManager] addString:value 
forCompletionEntry:key];
-    [pubFields setValue:[date standardDescription] 
forKey:BDSKDateModifiedString];
+    [self setModifiedDate:date];
        [self updateMetadataForKey:key];
        
     if ([self owner]) {
@@ -4031,6 +4026,14 @@
     }
 }
 
+- (void)setModifiedDate:(NSDate *)date {
+    [self setDateModified:date];
+    if (date)
+        [pubFields setObject:[date standardDescription] 
forKey:BDSKDateModifiedString];
+    else
+        [pubFields removeObjectForKey:BDSKDateModifiedString];
+}
+
 // The date setters should only be used at initialization or from 
updateMetadata:forKey:.  If you want to change the date, change the value in 
pubFields, and let updateMetadata handle the ivar.
 - (void)updateMetadataForKey:(NSString *)key{
     
@@ -4077,31 +4080,29 @@
         [theDate release];
        }
        
-    // setDateAdded: is only called here; it is derived based on pubFields 
value of BDSKDateAddedString
-    if (key == nil || allFieldsChanged || [BDSKDateAddedString 
isEqualToString:key]) {
+    // initially or when all fields are changed set the added and modified 
date based on the field values
+    if (key == nil || allFieldsChanged) {
                NSString *dateAddedValue = [pubFields 
objectForKey:BDSKDateAddedString];
-               if (![NSString isEmptyString:dateAddedValue]) {
+               if ([NSString isEmptyString:dateAddedValue]) {
+            [self setDateAdded:nil];
+        } else {
             theDate = [[NSDate alloc] initWithString:dateAddedValue];
             if (theDate == nil)
                 theDate = [[NSDate 
dateWithNaturalLanguageString:dateAddedValue] retain];
                        [self setDateAdded:theDate];
             [theDate release];
-               }else{
-                       [self setDateAdded:nil];
                }
-       }
-       
-    // we shouldn't check for the key here, as the DateModified can be set 
with any key
-    // setDateModified: is only called here; it is derived based on pubFields 
value of BDSKDateAddedString
-    NSString *dateModValue = [pubFields objectForKey:BDSKDateModifiedString];
-    if (![NSString isEmptyString:dateModValue]) {
-        theDate = [[NSDate alloc] initWithString:dateModValue];
-        if (theDate == nil)
-            theDate = [[NSDate dateWithNaturalLanguageString:dateModValue] 
retain];
-        [self setDateModified:theDate];
-        [theDate release];
-    }else{
-        [self setDateModified:nil];
+        
+        NSString *dateModValue = [pubFields 
objectForKey:BDSKDateModifiedString];
+        if ([NSString isEmptyString:dateModValue]) {
+            [self setDateModified:nil];
+        } else {
+            theDate = [[NSDate alloc] initWithString:dateModValue];
+            if (theDate == nil)
+                theDate = [[NSDate dateWithNaturalLanguageString:dateModValue] 
retain];
+            [self setDateModified:theDate];
+            [theDate release];
+        }
     }
 }
 

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Bibdesk-commit mailing list
Bibdesk-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-commit

Reply via email to