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

Reply via email to