Revision: 28399
http://sourceforge.net/p/bibdesk/svn/28399
Author: hofman
Date: 2023-10-06 14:41:14 +0000 (Fri, 06 Oct 2023)
Log Message:
-----------
no need to redo alias resolution or existence check when moving file out of the
way
Modified Paths:
--------------
trunk/bibdesk/BDSKFiler.m
Modified: trunk/bibdesk/BDSKFiler.m
===================================================================
--- trunk/bibdesk/BDSKFiler.m 2023-10-06 09:23:50 UTC (rev 28398)
+++ trunk/bibdesk/BDSKFiler.m 2023-10-06 14:41:14 UTC (rev 28399)
@@ -345,6 +345,8 @@
filePaperInfo(0);
}
+#define BDSKFilerErrorFileResolution (1 << 9)
+
- (BOOL)moveItemAtURL:(NSURL *)fileURL toURL:(NSURL *)newFileURL
ignoring:(BDSKFilerError)ignoredError errorInfo:(NSDictionary **)errorInfo{
NSFileManager *fm = [NSFileManager defaultManager];
NSURL *resolvedURL = nil;
@@ -354,53 +356,59 @@
BDSKFilerError statusFlag = BDSKFilerErrorNone;
BOOL ignoreMove = NO;
- // filemanager needs aliases resolved for moving and existence checks
- // ...however we want to move aliases, not their targets
- // so we resolve aliases in the path to the containing folder
- resolvedNewURL = [[[newFileURL URLByDeletingLastPathComponent]
fileURLByResolvingAliases]
- URLByAppendingPathComponent:[newFileURL
lastPathComponent] isDirectory:NO];
- resolvedURL = [[[fileURL URLByDeletingLastPathComponent]
fileURLByResolvingAliases]
- URLByAppendingPathComponent:[fileURL lastPathComponent]
isDirectory:NO];
- if (resolvedNewURL == nil || resolvedURL == nil) {
- status = NSLocalizedString(@"Unable to resolve aliases in path.",
@"AutoFile error message");
- statusFlag = BDSKFilerErrorCannotResolveAlias;
- }else if([resolvedNewURL checkResourceIsReachableAndReturnError:NULL]){
- if([resolvedURL checkResourceIsReachableAndReturnError:NULL]){
- if((ignoredError & BDSKFilerErrorTargetFileExists) != 0){
- NSURL *backupURL = [fm
desktopFileURLWithBasename:[resolvedNewURL lastPathComponent]];
- if(NO == [self moveItemAtURL:resolvedNewURL toURL:backupURL
ignoring:BDSKFilerErrorNone errorInfo:NULL] &&
- [resolvedNewURL
checkResourceIsReachableAndReturnError:NULL] &&
- ![fm removeItemAtURL:resolvedNewURL error:NULL]){
- status = NSLocalizedString(@"Unable to remove existing
file at target location.", @"AutoFile error message");
- statusFlag = BDSKFilerErrorTargetFileExists |
BDSKFilerErrorCannotRemoveFile;
- // cleanup: move back backup
- if(![fm moveItemAtURL:backupURL toURL:resolvedNewURL
error:NULL] && [resolvedNewURL checkResourceIsReachableAndReturnError:NULL]){
- [fm removeItemAtURL:backupURL error:NULL];
+ if ((ignoredError & BDSKFilerErrorFileResolution)) {
+ // no need to resolve aliases and check for existence
+ resolvedURL = fileURL;
+ resolvedNewURL = newFileURL;
+ } else {
+ // filemanager needs aliases resolved for moving and existence checks
+ // ...however we want to move aliases, not their targets
+ // so we resolve aliases in the path to the containing folder
+ resolvedNewURL = [[[newFileURL URLByDeletingLastPathComponent]
fileURLByResolvingAliases]
+ URLByAppendingPathComponent:[newFileURL
lastPathComponent] isDirectory:NO];
+ resolvedURL = [[[fileURL URLByDeletingLastPathComponent]
fileURLByResolvingAliases]
+ URLByAppendingPathComponent:[fileURL
lastPathComponent] isDirectory:NO];
+ if (resolvedNewURL == nil || resolvedURL == nil) {
+ status = NSLocalizedString(@"Unable to resolve aliases in path.",
@"AutoFile error message");
+ statusFlag = BDSKFilerErrorCannotResolveAlias;
+ }else if([resolvedNewURL checkResourceIsReachableAndReturnError:NULL]){
+ if([resolvedURL checkResourceIsReachableAndReturnError:NULL]){
+ if((ignoredError & BDSKFilerErrorTargetFileExists) != 0){
+ NSURL *backupURL = [fm
desktopFileURLWithBasename:[resolvedNewURL lastPathComponent]];
+ if(NO == [self moveItemAtURL:resolvedNewURL
toURL:backupURL ignoring:BDSKFilerErrorFileResolution errorInfo:NULL] &&
+ [resolvedNewURL
checkResourceIsReachableAndReturnError:NULL] &&
+ ![fm removeItemAtURL:resolvedNewURL error:NULL]){
+ status = NSLocalizedString(@"Unable to remove existing
file at target location.", @"AutoFile error message");
+ statusFlag = BDSKFilerErrorTargetFileExists |
BDSKFilerErrorCannotRemoveFile;
+ // cleanup: move back backup
+ if(![fm moveItemAtURL:backupURL toURL:resolvedNewURL
error:NULL] && [resolvedNewURL checkResourceIsReachableAndReturnError:NULL]){
+ [fm removeItemAtURL:backupURL error:NULL];
+ }
}
+ }else{
+ if([fm isDeletableFileAtPath:[resolvedNewURL path]]){
+ status = NSLocalizedString(@"File exists at target
location.", @"AutoFile error message");
+ fix = NSLocalizedString(@"Overwrite existing file.",
@"AutoFile fix");
+ }else{
+ status = NSLocalizedString(@"Undeletable file exists
at target location.", @"AutoFile error message");
+ }
+ statusFlag = BDSKFilerErrorTargetFileExists;
}
+ }else if((ignoredError & BDSKFilerErrorSourceFileDoesNotExist) !=
0){
+ ignoreMove = YES;
}else{
- if([fm isDeletableFileAtPath:[resolvedNewURL path]]){
- status = NSLocalizedString(@"File exists at target
location.", @"AutoFile error message");
- fix = NSLocalizedString(@"Overwrite existing file.",
@"AutoFile fix");
- }else{
- status = NSLocalizedString(@"Undeletable file exists at
target location.", @"AutoFile error message");
- }
- statusFlag = BDSKFilerErrorTargetFileExists;
+ status = NSLocalizedString(@"Original file does not exist,
file exists at target location.", @"AutoFile error message");
+ fix = NSLocalizedString(@"Use existing file at target
location.", @"AutoFile fix");
+ statusFlag = BDSKFilerErrorSourceFileDoesNotExist |
BDSKFilerErrorTargetFileExists;
}
- }else if((ignoredError & BDSKFilerErrorSourceFileDoesNotExist) != 0){
- ignoreMove = YES;
- }else{
- status = NSLocalizedString(@"Original file does not exist, file
exists at target location.", @"AutoFile error message");
- fix = NSLocalizedString(@"Use existing file at target location.",
@"AutoFile fix");
- statusFlag = BDSKFilerErrorSourceFileDoesNotExist |
BDSKFilerErrorTargetFileExists;
+ }else if(NO == [resolvedURL
checkResourceIsReachableAndReturnError:NULL]){
+ status = NSLocalizedString(@"Original file does not exist.",
@"AutoFile error message");
+ statusFlag = BDSKFilerErrorSourceFileDoesNotExist;
+ }else if((ignoredError & BDSKFilerErrorCannotMoveFile) == 0 && NO ==
[fm isDeletableFileAtPath:[resolvedURL path]]){
+ status = NSLocalizedString(@"Unable to move read-only file.",
@"AutoFile error message");
+ fix = NSLocalizedString(@"Copy original file.", @"AutoFile fix");
+ statusFlag = BDSKFilerErrorCannotMoveFile;
}
- }else if(NO == [resolvedURL checkResourceIsReachableAndReturnError:NULL]){
- status = NSLocalizedString(@"Original file does not exist.",
@"AutoFile error message");
- statusFlag = BDSKFilerErrorSourceFileDoesNotExist;
- }else if((ignoredError & BDSKFilerErrorCannotMoveFile) == 0 && NO == [fm
isDeletableFileAtPath:[resolvedURL path]]){
- status = NSLocalizedString(@"Unable to move read-only file.",
@"AutoFile error message");
- fix = NSLocalizedString(@"Copy original file.", @"AutoFile fix");
- statusFlag = BDSKFilerErrorCannotMoveFile;
}
if(statusFlag == BDSKFilerErrorNone && ignoreMove == NO){
// create parent directories if necessary (OmniFoundation)
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