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