Revision: 26778 http://sourceforge.net/p/bibdesk/svn/26778 Author: hofman Date: 2021-08-30 14:09:29 +0000 (Mon, 30 Aug 2021) Log Message: ----------- Cache favicons to use for history items, and reuse when loading the same URL
Modified Paths: -------------- trunk/bibdesk/BDSKWebGroupViewController.m trunk/bibdesk/BDSKWebView.h trunk/bibdesk/BDSKWebView.m Modified: trunk/bibdesk/BDSKWebGroupViewController.m =================================================================== --- trunk/bibdesk/BDSKWebGroupViewController.m 2021-08-30 13:43:48 UTC (rev 26777) +++ trunk/bibdesk/BDSKWebGroupViewController.m 2021-08-30 14:09:29 UTC (rev 26778) @@ -51,6 +51,7 @@ #import "NSString_BDSKExtensions.h" #import "NSURL_BDSKExtensions.h" #import "NSPasteboard_BDSKExtensions.h" +#import "BDSKWebView.h" #define MAX_HISTORY 50 #define BACK_SEGMENT_INDEX 0 @@ -205,7 +206,7 @@ title = [url isFileURL] ? [[url path] lastPathComponent] : [[url absoluteString] stringByRemovingPercentEncoding]; } NSMenuItem *menuItem = [menu addItemWithTitle:title action:@selector(goBackForwardInHistory:) keyEquivalent:@""]; - [menuItem setImageAndSize:[item icon]]; + [menuItem setImageAndSize:[BDSKWebView faviconForURLString:[item URLString]] ?: [item icon]]; [menuItem setTarget:self]; [menuItem setRepresentedObject:item]; } Modified: trunk/bibdesk/BDSKWebView.h =================================================================== --- trunk/bibdesk/BDSKWebView.h 2021-08-30 13:43:48 UTC (rev 26777) +++ trunk/bibdesk/BDSKWebView.h 2021-08-30 14:09:29 UTC (rev 26778) @@ -64,6 +64,8 @@ - (IBAction)addBookmark:(id)sender; ++ (NSImage *)faviconForURLString:(NSString *)URLString; + @end #pragma mark - Modified: trunk/bibdesk/BDSKWebView.m =================================================================== --- trunk/bibdesk/BDSKWebView.m 2021-08-30 13:43:48 UTC (rev 26777) +++ trunk/bibdesk/BDSKWebView.m 2021-08-30 14:09:29 UTC (rev 26778) @@ -82,6 +82,8 @@ @dynamic delegate, navigationDelegate, URL; +static NSMutableDictionary *webIcons; + - (id)initWithFrame:(NSRect)frameRect frameName:(NSString *)frameName groupName:(NSString *)groupName { self = [super initWithFrame:frameRect frameName:frameName groupName:@"BibDeskWebGroup"]; if (self) { @@ -173,7 +175,16 @@ #pragma mark Favicon -- (void)downloadFavicon { +- (void)retrieveFavicon { + NSImage *icon = [[self class] faviconForURLString:[self mainFrameURL]]; + if (icon) { + [favicon release]; + favicon = [icon retain]; + if ([[self frameLoadDelegate] respondsToSelector:@selector(webView:didReceiveIcon:forFrame:)]) + [[self frameLoadDelegate] webView:self didReceiveIcon:favicon forFrame:[self mainFrame]]; + return; + } + NSMutableArray *favicons = [NSMutableArray array]; WebFrame *frame = [self mainFrame]; NSArray *nodes = [[frame DOMDocument] nodesForXPath:@"/html/head/link[@rel='icon' or @rel='shortcut icon' or @rel='apple-touch-icon' or @rel='apple-touch-icon-precomposed']"]; @@ -252,6 +263,11 @@ [data release]; if (favicon && [[self frameLoadDelegate] respondsToSelector:@selector(webView:didReceiveIcon:forFrame:)]) [[self frameLoadDelegate] webView:self didReceiveIcon:favicon forFrame:[self mainFrame]]; + if (favicon) { + if (webIcons == nil) + webIcons = [[NSMutableDictionary alloc] init]; + [webIcons setObject:favicon forKey:[self mainFrameURL]]; + } } } @@ -258,9 +274,13 @@ - (NSImage *)mainFrameIcon { if (RUNNING_BEFORE(10_13)) return [super mainFrameIcon]; - return favicon ?: [NSImage imageNamed:@"Bookmark"]; + return favicon ?: [[self class] faviconForURLString:[self mainFrameURL]] ?: [NSImage imageNamed:@"Bookmark"]; } ++ (NSImage *)faviconForURLString:(NSString *)URLString { + return [webIcons valueForKey:URLString]; +} + @end #pragma mark - @@ -355,8 +375,8 @@ } if (RUNNING_BEFORE(10_13)) [self webView:sender setIcon:[sender mainFrameIcon]]; - else if ([sender respondsToSelector:@selector(downloadFavicon)]) - [(BDSKWebView *)sender downloadFavicon]; + else if ([sender respondsToSelector:@selector(retrieveFavicon)]) + [(BDSKWebView *)sender retrieveFavicon]; [self webView:sender setTitle:title]; } [self webView:sender setLoading:[sender isLoading]]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. _______________________________________________ Bibdesk-commit mailing list Bibdesk-commit@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-commit