Revision: 16728
          http://sourceforge.net/p/skim-app/code/16728
Author:   hofman
Date:     2026-10-27 23:01:37 +0000 (Tue, 27 Oct 2026)
Log Message:
-----------
efficient method to compare fileURL of alias to another fileURL, by comparing 
resource values. Should prevent iCloud documents from downloading.

Modified Paths:
--------------
    trunk/SKAlias.h
    trunk/SKAlias.m
    trunk/SKBookmark.h
    trunk/SKBookmark.m
    trunk/SKBookmarkController.m

Modified: trunk/SKAlias.h
===================================================================
--- trunk/SKAlias.h     2026-10-27 16:17:37 UTC (rev 16727)
+++ trunk/SKAlias.h     2026-10-27 23:01:37 UTC (rev 16728)
@@ -55,6 +55,9 @@
 - (nullable instancetype)initWithURL:(NSURL *)fileURL;
 - (instancetype)init NS_UNAVAILABLE;
 
+// this is like [[self fileURLNoUI] isEqual:fileURL] but more efficient, 
assumes fileURL exists
+- (BOOL)matchesFileURL:(NSURL *)fileURL;
+
 @end
 
 NS_ASSUME_NONNULL_END

Modified: trunk/SKAlias.m
===================================================================
--- trunk/SKAlias.m     2026-10-27 16:17:37 UTC (rev 16727)
+++ trunk/SKAlias.m     2026-10-27 23:01:37 UTC (rev 16728)
@@ -175,4 +175,30 @@
     return [self fileURLAllowingUI:NO];
 }
 
+- (BOOL)matchesFileURL:(NSURL *)fileURL {
+    if (aliasHandle == NULL && data) {
+        NSDictionary *dict1 = [fileURL resourceValuesForKeys:@[NSURLPathKey, 
@"_NSURLFileIDKey", NSURLVolumeIdentifierKey] error:NULL];
+        NSDictionary *dict2 = [NSURL resourceValuesForKeys:@[NSURLPathKey, 
@"_NSURLFileIDKey", NSURLVolumeIdentifierKey] fromBookmarkData:data];
+        NSString *path1 = [dict1 objectForKey:NSURLPathKey];
+        NSString *path2 = [dict2 objectForKey:NSURLPathKey];
+        if (path1 && path2) {
+            if ([path1 isCaseInsensitiveEqual:path2])
+                return YES;
+            if ([[NSURL fileURLWithPath:path2 isDirectory:[[path2 
pathExtension] isCaseInsensitiveEqual:@"pdfd"]] 
checkResourceIsReachableAndReturnError:NULL])
+                return NO;
+            NSNumber *fileID1 = [dict1 objectForKey:@"_NSURLFileIDKey"];
+            NSNumber *fileID2 = [dict2 objectForKey:@"_NSURLFileIDKey"];
+            if (fileID1 && fileID2) {
+                if ([fileID1 isEqual:fileID2] == NO)
+                    return NO;
+                NSString *volumeID1 = [dict1 
objectForKey:NSURLVolumeIdentifierKey];
+                NSString *volumeID2 = [dict2 
objectForKey:NSURLVolumeIdentifierKey];
+                if (volumeID1 && volumeID2)
+                    return [volumeID1 isEqualToString:volumeID2];
+            }
+        }
+    }
+    return [[[self fileURLNoUI] path] isCaseInsensitiveEqual:[fileURL path]];
+}
+
 @end

Modified: trunk/SKBookmark.h
===================================================================
--- trunk/SKBookmark.h  2026-10-27 16:17:37 UTC (rev 16727)
+++ trunk/SKBookmark.h  2026-10-27 23:01:37 UTC (rev 16728)
@@ -48,6 +48,8 @@
     SKBookmarkTypeSeparator
 };
 
+@class SKAlias;
+
 @interface SKBookmark : NSObject <NSCopying, QLPreviewItem> {
     __weak SKBookmark *parent;
 }
@@ -103,6 +105,8 @@
 
 @property (nonatomic, nullable, readonly) NSURL *skimURL;
 
+- (BOOL)hasFileURL:(NSURL *)fileURL;
+
 @end
 
 NS_ASSUME_NONNULL_END

Modified: trunk/SKBookmark.m
===================================================================
--- trunk/SKBookmark.m  2026-10-27 16:17:37 UTC (rev 16727)
+++ trunk/SKBookmark.m  2026-10-27 23:01:37 UTC (rev 16728)
@@ -317,6 +317,8 @@
     return url;
 }
 
+- (BOOL)hasFileURL:(NSURL *)fileURL { return NO; }
+
 @end
 
 #pragma mark -
@@ -609,6 +611,10 @@
     return @[self];
 }
 
+- (BOOL)hasFileURL:(NSURL *)fileURL {
+    return [alias matchesFileURL:fileURL];
+}
+
 @end
 
 #pragma mark -

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2026-10-27 16:17:37 UTC (rev 16727)
+++ trunk/SKBookmarkController.m        2026-10-27 23:01:37 UTC (rev 16728)
@@ -257,9 +257,8 @@
 #pragma mark Recent Documents
 
 - (SKBookmark *)recentDocumentAtURL:(NSURL *)fileURL {
-    NSString *path = [fileURL path];
     for (SKBookmark *info in recentDocuments) {
-        if ([[[info fileURL] path] isCaseInsensitiveEqual:path])
+        if ([info hasFileURL:fileURL])
             return info;
     }
     return nil;

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



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to