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