Revision: 29610
          http://sourceforge.net/p/bibdesk/svn/29610
Author:   hofman
Date:     2025-09-19 16:53:23 +0000 (Fri, 19 Sep 2025)
Log Message:
-----------
save recent icons for pages and for icon URLs separately, try to get icon from 
recent icon

Modified Paths:
--------------
    trunk/bibdesk/BDSKWebIconDatabase.h
    trunk/bibdesk/BDSKWebIconDatabase.m
    trunk/bibdesk/BDSKWebView.m

Modified: trunk/bibdesk/BDSKWebIconDatabase.h
===================================================================
--- trunk/bibdesk/BDSKWebIconDatabase.h 2025-09-19 16:42:21 UTC (rev 29609)
+++ trunk/bibdesk/BDSKWebIconDatabase.h 2025-09-19 16:53:23 UTC (rev 29610)
@@ -43,6 +43,7 @@
 @interface BDSKWebIconDatabase : NSObject  {
     NSMutableDictionary *icons;
     NSMutableDictionary *pages;
+    NSMutableDictionary *recentPageIcons;
     NSMutableDictionary *recentIcons;
     NSMutableDictionary *cachedIcons;
 }
@@ -51,6 +52,7 @@
 
 - (nullable NSImage *)iconForURLString:(NSString *)pageURLString;
 - (nullable NSImage *)recentIconForURLString:(NSString *)aURLString;
+- (nullable NSImage *)recentIconForIconURLString:(NSString *)aURLString;
 
 - (void)setIcon:(NSImage *)icon withData:(nullable NSData *)data 
fromURLString:(NSString *)iconURLString forURLString:(NSString *)pageURLString 
originalURLString:(nullable NSString *)originalURLString;
 

Modified: trunk/bibdesk/BDSKWebIconDatabase.m
===================================================================
--- trunk/bibdesk/BDSKWebIconDatabase.m 2025-09-19 16:42:21 UTC (rev 29609)
+++ trunk/bibdesk/BDSKWebIconDatabase.m 2025-09-19 16:53:23 UTC (rev 29610)
@@ -95,7 +95,7 @@
     pageURLString = URLStringByRemovingFragment(pageURLString);
     if ([NSString isEmptyString:pageURLString])
         return nil;
-    NSImage *icon = [recentIcons objectForKey:pageURLString];
+    NSImage *icon = [recentPageIcons objectForKey:pageURLString];
     if (icon)
         return icon;
     NSString *iconURLString = [[pages objectForKey:pageURLString] 
objectForKey:ICONURL_KEY];
@@ -104,13 +104,13 @@
             pageURLString = [pageURLString substringToIndex:[pageURLString 
length] - 1];
         else
             pageURLString = [pageURLString stringByAppendingString:@"/"];
-        if ((icon = [recentIcons objectForKey:pageURLString]))
+        if ((icon = [recentPageIcons objectForKey:pageURLString]))
             return icon;
         iconURLString = [[pages objectForKey:pageURLString] 
objectForKey:ICONURL_KEY];
     }
     if (iconURLString == nil)
         return nil;
-    icon = [cachedIcons objectForKey:iconURLString];
+    icon = [recentIcons objectForKey:iconURLString] ?: [cachedIcons 
objectForKey:iconURLString];
     if (icon)
         return icon;
     NSData *data = [icons objectForKey:iconURLString];
@@ -128,7 +128,7 @@
     aURLString = URLStringByRemovingFragment(aURLString);
     if ([NSString isEmptyString:aURLString])
         return nil;
-    NSImage *icon = [recentIcons objectForKey:aURLString];
+    NSImage *icon = [recentPageIcons objectForKey:aURLString];
     if (icon == nil)
         return nil;
     [[pages objectForKey:aURLString] setObject:[NSDate date] 
forKey:LASTVISITED_KEY];
@@ -135,19 +135,25 @@
     return icon;
 }
 
+- (NSImage *)recentIconForIconURLString:(NSString *)iconURLString {
+    return [recentIcons objectForKey:iconURLString];
+}
+
 - (void)setIcon:(NSImage *)icon withData:(NSData *)data 
fromURLString:(NSString *)iconURLString forURLString:(NSString *)pageURLString 
originalURLString:(NSString *)originalURLString {
     pageURLString = URLStringByRemovingFragment(pageURLString);
     originalURLString = URLStringByRemovingFragment(originalURLString);
     if ([NSString isEmptyString:pageURLString])
         return;
-    if (recentIcons == nil)
-        recentIcons = [[NSMutableDictionary alloc] init];
-    [recentIcons setObject:icon forKey:pageURLString];
+    if (recentPageIcons == nil)
+        recentPageIcons = [[NSMutableDictionary alloc] init];
+    [recentPageIcons setObject:icon forKey:pageURLString];
     NSMutableDictionary *dict = [NSMutableDictionary 
dictionaryWithObjectsAndKeys:iconURLString, ICONURL_KEY, [NSDate date], 
LASTVISITED_KEY, nil];
     [pages setObject:dict forKey:pageURLString];
     if (originalURLString)
         [pages setObject:dict forKey:originalURLString];
     if (data) {
+        if (recentIcons == nil)
+            recentIcons = [[NSMutableDictionary alloc] init];
         [recentIcons setObject:icon forKey:iconURLString];
         [cachedIcons removeObjectForKey:iconURLString];
         [icons setObject:data forKey:iconURLString];
@@ -188,7 +194,7 @@
 }
 
 - (void)handleApplicationWillTerminate:(NSNotification *)notification {
-    if ([recentIcons count] == 0)
+    if ([recentPageIcons count] == 0)
         return;
     NSDictionary *dict = [self dictionaryWithLimit:([[WebHistory 
optionalSharedHistory] historyAgeInDaysLimit] ?: 7) * 86400.0];
     NSData *data = [NSPropertyListSerialization dataWithPropertyList:dict 
format:NSPropertyListBinaryFormat_v1_0 options:0 error:NULL];

Modified: trunk/bibdesk/BDSKWebView.m
===================================================================
--- trunk/bibdesk/BDSKWebView.m 2025-09-19 16:42:21 UTC (rev 29609)
+++ trunk/bibdesk/BDSKWebView.m 2025-09-19 16:53:23 UTC (rev 29610)
@@ -289,7 +289,7 @@
     }
     
     // different pages from the same site can have the same favicon
-    icon = faviconFromOrigin ? nil : [[BDSKWebIconDatabase sharedDatabase] 
recentIconForURLString:[faviconURL absoluteString]];
+    icon = faviconFromOrigin ? nil : [[BDSKWebIconDatabase sharedDatabase] 
recentIconForIconURLString:[faviconURL absoluteString]];
     urlString = [self mainFrameURL];
     NSUInteger fragmentLoc = [urlString rangeOfString:@"#" 
options:NSBackwardsSearch].location;
     if (urlString && fragmentLoc != NSNotFound)

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