Revision: 28627
http://sourceforge.net/p/bibdesk/svn/28627
Author: hofman
Date: 2024-01-17 15:40:06 +0000 (Wed, 17 Jan 2024)
Log Message:
-----------
Save linked files using bookmark data by default. Hidden pref to save legacy
alias data. Simplify some code calls.
Modified Paths:
--------------
trunk/bibdesk/BDSKLinkedFile.m
Modified: trunk/bibdesk/BDSKLinkedFile.m
===================================================================
--- trunk/bibdesk/BDSKLinkedFile.m 2024-01-17 10:41:02 UTC (rev 28626)
+++ trunk/bibdesk/BDSKLinkedFile.m 2024-01-17 15:40:06 UTC (rev 28627)
@@ -45,7 +45,7 @@
#define BDSKSaveLinkedFilesAsRelativePathOnlyKey
@"BDSKSaveLinkedFilesAsRelativePathOnly"
#define BDSKSaveLinkedFilesAsArchivedDataKey
@"BDSKSaveLinkedFilesAsArchivedData"
-#define BDSKSaveLinkedFilesAsBookmarkDataKey
@"BDSKSaveLinkedFilesAsBookmarkData"
+#define BDSKSaveLinkedFilesAsAliasKey @"BDSKSaveLinkedFilesAsAlias"
// this is the base64 encoding of "bplist", which is always the start of a
binary property list
#define ENCODED_PLIST_PREFIX @"YnBsaXN0"
@@ -54,10 +54,9 @@
#define BOOKMARK_KEY @"bookmark"
#define RELATIVEPATH_KEY @"relativePath"
-static NSURL *BDSKCreateURLFromFSRef(const FSRef *inRef);
-static BOOL BDSKPathToFSRef(NSString *inPath, FSRef *outRef);
-static NSDictionary *BDSKDictionaryFromPlistData(NSData *data);
-static NSDictionary *BDSKDictionaryFromArchivedData(NSData *data);
+static inline NSURL *BDSKCreateURLFromFSRef(const FSRef *inRef);
+static inline BOOL BDSKPathToFSRef(NSString *inPath, FSRef *outRef);
+static inline NSDictionary *BDSKDictionaryFromData(NSData *data);
#pragma mark -
@@ -68,7 +67,7 @@
+ (id)newWithFSRef:(const FSRef *)aRef baseRef:(const FSRef *)baseRef;
+ (id)newWithPath:(NSString *)path basePath:(NSString *)basePath;
- (BOOL)getFSRef:(FSRef *)outRef baseRef:(const FSRef *)baseRef
shouldUpdate:(BOOL *)shouldUpdate;
-- (void)updateWithFSRef:(const FSRef *)outRef baseRef:(const FSRef *)baseRef;
+- (void)updateWithFSRef:(const FSRef *)aRef baseRef:(const FSRef *)baseRef;
- (NSData *)copyData;
@end
@@ -130,9 +129,9 @@
static Class BDSKLinkedFileClass = Nil;
static BOOL saveRelativePathOnly = NO;
static BOOL saveArchivedData = NO;
-static BOOL wantsBookmark = NO;
+static BOOL wantsAlias = NO;
-#define BDSKLinkedAliasFile_alloc (wantsBookmark ? [BDSKBookmarkLinkedFile
alloc] : [BDSKAliasLinkedFile alloc])
+#define BDSKLinkedAliasFile_alloc (wantsAlias ? [BDSKAliasLinkedFile alloc] :
[BDSKBookmarkLinkedFile alloc])
+ (void)initialize {
BDSKINITIALIZE;
@@ -139,9 +138,9 @@
BDSKLinkedFileClass = self;
saveRelativePathOnly = [[NSUserDefaults standardUserDefaults]
boolForKey:BDSKSaveLinkedFilesAsRelativePathOnlyKey];
saveArchivedData = [[NSUserDefaults standardUserDefaults]
boolForKey:BDSKSaveLinkedFilesAsArchivedDataKey];
- wantsBookmark = saveArchivedData == NO && [[NSUserDefaults
standardUserDefaults] boolForKey:BDSKSaveLinkedFilesAsBookmarkDataKey];
+ wantsAlias = saveArchivedData || [[NSUserDefaults standardUserDefaults]
boolForKey:BDSKSaveLinkedFilesAsAliasKey];
- NSString *fileClassName = wantsBookmark ? @"BDSKBookmarkLinkedFile" :
@"BDSKAliasLinkedFile";
+ NSString *fileClassName = wantsAlias ? @"BDSKAliasLinkedFile" :
@"BDSKBookmarkLinkedFile";
[NSKeyedUnarchiver setClass:NSClassFromString(fileClassName)
forClassName:@"BDSKLinkedAliasFile"];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -356,14 +355,8 @@
NSLog(@"Ignoring exception \"%@\" while getting data from base 64
string.", exception);
}
if (data) {
- NSDictionary *dictionary = nil;
- if (saveArchivedData)
- dictionary = BDSKDictionaryFromArchivedData(data) ?:
BDSKDictionaryFromPlistData(data);
- else
- dictionary = BDSKDictionaryFromPlistData(data) ?:
BDSKDictionaryFromArchivedData(data);
- anAlias = [BDSKAlias newWithData:[dictionary
objectForKey:ALIASDATA_KEY]];
- if (anAlias == nil)
- anAlias = [[dictionary objectForKey:BOOKMARK_KEY] copy];
+ NSDictionary *dictionary = BDSKDictionaryFromData(data);
+ anAlias = [dictionary objectForKey:BOOKMARK_KEY] ?: [BDSKAlias
newWithData:[dictionary objectForKey:ALIASDATA_KEY]];
relPath = [dictionary objectForKey:RELATIVEPATH_KEY];
}
} else {
@@ -387,9 +380,7 @@
id anAlias = nil;
NSString *relPath = nil;
if ([coder allowsKeyedCoding]) {
- anAlias = [BDSKAlias newWithData:[coder
decodeObjectForKey:ALIASDATA_KEY]];
- if (anAlias == nil)
- anAlias = [coder decodeObjectForKey:BOOKMARK_KEY];
+ anAlias = [coder decodeObjectForKey:BOOKMARK_KEY] ?: [BDSKAlias
newWithData:[coder decodeObjectForKey:ALIASDATA_KEY]];
relPath = [coder decodeObjectForKey:RELATIVEPATH_KEY];
} else {
anAlias = [BDSKAlias newWithData:[coder decodeObject]];
@@ -1040,7 +1031,7 @@
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-static NSURL *BDSKCreateURLFromFSRef(const FSRef *inRef) {
+static inline NSURL *BDSKCreateURLFromFSRef(const FSRef *inRef) {
return inRef == NULL ? NULL : CFBridgingRelease(CFURLCreateFromFSRef(NULL,
inRef));
}
@@ -1054,11 +1045,11 @@
return sameVolume ? inBaseRef : NULL;
}
-static BOOL BDSKPathToFSRef(NSString *inPath, FSRef *outRef) {
+static inline BOOL BDSKPathToFSRef(NSString *inPath, FSRef *outRef) {
OSStatus err = fnfErr;
if (inPath != nil)
- err = FSPathMakeRefWithOptions((UInt8 *)[(NSString *)inPath
fileSystemRepresentation], kFSPathMakeRefDoNotFollowLeafSymlink, outRef, NULL);
+ err = FSPathMakeRefWithOptions((UInt8 *)[inPath
fileSystemRepresentation], kFSPathMakeRefDoNotFollowLeafSymlink, outRef, NULL);
return noErr == err;
}
@@ -1087,6 +1078,13 @@
return dictionary;
}
+static inline NSDictionary *BDSKDictionaryFromData(NSData *data) {
+ if (saveArchivedData)
+ return BDSKDictionaryFromArchivedData(data) ?:
BDSKDictionaryFromPlistData(data);
+ else
+ return BDSKDictionaryFromPlistData(data) ?:
BDSKDictionaryFromArchivedData(data);
+}
+
#pragma mark -
@implementation BDSKAlias
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