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