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 {