From 5dd20264bf00b61db1b812d23bd9acb7be1bde9f Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Fri, 29 Dec 2017 20:41:41 -0800 Subject: [PATCH] =?UTF-8?q?Use=20feed=20icon=E2=80=99s=20gathered=20from?= =?UTF-8?q?=20HTML=20metadata.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MainWindow/Detail/ArticleRenderer.swift | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/Evergreen/MainWindow/Detail/ArticleRenderer.swift b/Evergreen/MainWindow/Detail/ArticleRenderer.swift index df1c59dff..e2e523b56 100644 --- a/Evergreen/MainWindow/Detail/ArticleRenderer.swift +++ b/Evergreen/MainWindow/Detail/ArticleRenderer.swift @@ -20,6 +20,7 @@ class ArticleRenderer { let article: Article let articleStyle: ArticleStyle static var faviconImgTagCache = [Feed: String]() + static var feedIconImgTagCache = [Feed: String]() lazy var longDateFormatter: DateFormatter = { let dateFormatter = DateFormatter() @@ -171,8 +172,7 @@ class ArticleRenderer { d["avatars"] = "" var didAddAvatar = false - if let avatar = avatarToUse() { - let avatarHTML = avatar.html(dimension: 64) + if let avatarHTML = avatarImgTag() { d["avatars"] = avatarHTML didAddAvatar = true } @@ -245,6 +245,23 @@ class ArticleRenderer { return nil } + private func feedIconImgTag(forFeed feed: Feed) -> String? { + + if let cachedImgTag = ArticleRenderer.feedIconImgTagCache[feed] { + return cachedImgTag + } + + if let icon = appDelegate.feedIconDownloader.icon(for: feed) { + if let s = base64String(forImage: icon) { + let imgTag = "" + ArticleRenderer.feedIconImgTagCache[feed] = imgTag + return imgTag + } + } + + return nil + } + private func base64String(forImage image: NSImage) -> String? { @@ -318,6 +335,25 @@ class ArticleRenderer { return nil } + private let avatarDimension = 48 + + private func avatarImgTag() -> String? { + + if let author = singleArticleSpecifiedAuthor(), let imageURL = author.avatarURL { + return Avatar(imageURL: imageURL, url: author.url).html(dimension: avatarDimension) + } + if let feed = article.feed, let imgTag = feedIconImgTag(forFeed: feed) { + return imgTag + } + if let feedIconURL = article.feed?.iconURL { + return Avatar(imageURL: feedIconURL, url: article.feed?.homePageURL ?? article.feed?.url).html(dimension: avatarDimension) + } + if let author = singleFeedSpecifiedAuthor(), let imageURL = author.avatarURL { + return Avatar(imageURL: imageURL, url: author.url).html(dimension: avatarDimension) + } + return nil + } + // private func authorAvatar() -> String { // // guard let authors = article.authors, authors.count == 1, let author = authors.first else {