Revision: 16749
          http://sourceforge.net/p/skim-app/code/16749
Author:   hofman
Date:     2026-10-30 15:49:37 +0000 (Fri, 30 Oct 2026)
Log Message:
-----------
make sure hasFileURL: is used only with an existing fileURL

Modified Paths:
--------------
    trunk/NSDocument_SKExtensions.m
    trunk/SKBookmarkController.h
    trunk/SKBookmarkController.m
    trunk/SKMainDocument.m

Modified: trunk/NSDocument_SKExtensions.m
===================================================================
--- trunk/NSDocument_SKExtensions.m     2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/NSDocument_SKExtensions.m     2026-10-30 15:49:37 UTC (rev 16749)
@@ -105,7 +105,8 @@
 #pragma mark Document Setup
 
 - (void)saveRecentDocumentInfo {
-    if ([[SKBookmarkController sharedBookmarkController] 
addRecentDocumentForURL:[self fileURL] pageIndex:NSNotFound snapshots:nil])
+    NSURL *fileURL = [self fileURL];
+    if ([fileURL checkResourceIsReachableAndReturnError:NULL] && 
[[SKBookmarkController sharedBookmarkController] 
addRecentDocumentForURL:fileURL pageIndex:NSNotFound snapshots:nil])
         [self setRecentInfoNeedsUpdate:NO];
 }
 

Modified: trunk/SKBookmarkController.h
===================================================================
--- trunk/SKBookmarkController.h        2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/SKBookmarkController.h        2026-10-30 15:49:37 UTC (rev 16749)
@@ -96,6 +96,7 @@
 - (void)removeBookmarkAtIndex:(NSUInteger)anIndex ofBookmark:(SKBookmark 
*)parent animate:(BOOL)animate;
 - (void)replaceBookmarkAtIndex:(NSUInteger)anIndex ofBookmark:(SKBookmark 
*)parent withBookmark:(SKBookmark *)bookmark animate:(BOOL)animate;
 
+// fileURL is assumed to exist in the next two methods
 - (BOOL)addRecentDocumentForURL:(NSURL *)fileURL 
pageIndex:(NSUInteger)pageIndex snapshots:(nullable 
NSArray<NSDictionary<NSString *, id> *> *)snapshots;
 - (nullable SKBookmark *)recentDocumentAtURL:(NSURL *)fileURL;
 

Modified: trunk/SKBookmarkController.m
===================================================================
--- trunk/SKBookmarkController.m        2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/SKBookmarkController.m        2026-10-30 15:49:37 UTC (rev 16749)
@@ -265,24 +265,23 @@
 }
 
 - (BOOL)addRecentDocumentForURL:(NSURL *)fileURL 
pageIndex:(NSUInteger)pageIndex snapshots:(NSArray *)snapshots {
+    // fileURL must exist when this is called
     if (maxRecentDocumentsCount <= 0 || appIsTerminating)
         return YES;
     
-    if (fileURL) {
-        SKBookmark *info = [[SKBookmark alloc] initWithURL:fileURL 
pageIndex:pageIndex snapshots:snapshots];
-        if (info) {
-            SKBookmark *oldInfo = [self recentDocumentAtURL:fileURL];
-            if (oldInfo)
-                [recentDocuments removeObjectIdenticalTo:oldInfo];
-            [recentDocuments insertObject:info atIndex:0];
-            NSUInteger maxCount = maxRecentDocumentsCount + 
[[[NSDocumentController sharedDocumentController] documents] count];
-            while ([recentDocuments count] > maxCount)
-                [recentDocuments removeLastObject];
-            
-            [self performSelectorOnce:@selector(saveBookmarksData) 
afterDelay:SAVE_DELAY];
-            
-            return YES;
-        }
+    SKBookmark *info = [[SKBookmark alloc] initWithURL:fileURL 
pageIndex:pageIndex snapshots:snapshots];
+    if (info) {
+        SKBookmark *oldInfo = [self recentDocumentAtURL:fileURL];
+        if (oldInfo)
+            [recentDocuments removeObjectIdenticalTo:oldInfo];
+        [recentDocuments insertObject:info atIndex:0];
+        NSUInteger maxCount = maxRecentDocumentsCount + 
[[[NSDocumentController sharedDocumentController] documents] count];
+        while ([recentDocuments count] > maxCount)
+            [recentDocuments removeLastObject];
+        
+        [self performSelectorOnce:@selector(saveBookmarksData) 
afterDelay:SAVE_DELAY];
+        
+        return YES;
     }
     
     return NO;
@@ -636,7 +635,7 @@
 
 static inline BOOL bookmarkHasFileURL(SKBookmark *bm, NSArray *fileURLs) {
     for (NSURL *fileURL in fileURLs) {
-        if ([fileURL isEqual:[NSNull null]] == NO && [bm hasFileURL:fileURL])
+        if ([bm hasFileURL:fileURL])
             return YES;
     }
     return NO;
@@ -643,7 +642,12 @@
 }
 
 - (NSArray *)closedDocumentBookmarks {
-    NSArray *openFileURLs = [[[NSDocumentController sharedDocumentController] 
documents] valueForKey:@"fileURL"];
+    NSMutableArray *openFileURLs = [NSMutableArray array];
+    for (NSDocument *document in [[NSDocumentController 
sharedDocumentController] documents]) {
+        NSURL *fileURL = [document fileURL];
+        if ([fileURL checkResourceIsReachableAndReturnError:NULL])
+            [openFileURLs addObject:fileURL];
+    }
     NSMutableArray *closedBms = [NSMutableArray array];
     for (SKBookmark *aBm in recentDocuments) {
         if (([closedBms count] > 0 || bookmarkHasFileURL(aBm, openFileURLs) == 
NO) && [aBm fileURL])
@@ -654,7 +658,7 @@
 
 - (SKBookmark *)currentDocumentBookmark {
     NSURL *fileURL = [[[[NSApp mainWindow] windowController] document] 
fileURL];
-    if (fileURL) {
+    if ([fileURL checkResourceIsReachableAndReturnError:NULL]) {
         NSArray *currentBookmarks = [[[self bookmarkRoot] entireContents] 
filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^(SKBookmark *bm, 
NSDictionary *bindings){ return [bm hasFileURL:fileURL]; }]];
         if ([currentBookmarks count] > 1) {
             return [[SKBookmark alloc] initFolderWithChildren:[[NSArray alloc] 
initWithArray:currentBookmarks copyItems:YES] label:NSLocalizedString(@"Current 
Document", @"Menu item title")];

Modified: trunk/SKMainDocument.m
===================================================================
--- trunk/SKMainDocument.m      2026-10-30 15:25:18 UTC (rev 16748)
+++ trunk/SKMainDocument.m      2026-10-30 15:49:37 UTC (rev 16749)
@@ -237,6 +237,8 @@
     if ([[primaryWindowController window] delegate] == nil)
         return;
     NSURL *fileURL = [self fileURL];
+    if ([fileURL checkResourceIsReachableAndReturnError:NULL] == NO)
+        return;
     NSUInteger pageIndex = [[[self pdfView] currentPage] pageIndex];
     NSArray *snapshots = [[[self primaryWindowController] snapshots] 
valueForKey:SKSnapshotCurrentSetupKey];
     if ([[SKBookmarkController sharedBookmarkController] 
addRecentDocumentForURL:fileURL pageIndex:pageIndex snapshots:[snapshots count] 
> 0 ? snapshots : 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