diff --git a/Evergreen/MainWindow/Detail/ArticleRenderer.swift b/Evergreen/MainWindow/Detail/ArticleRenderer.swift index a1ab3ecd2..df1c59dff 100644 --- a/Evergreen/MainWindow/Detail/ArticleRenderer.swift +++ b/Evergreen/MainWindow/Detail/ArticleRenderer.swift @@ -19,6 +19,7 @@ class ArticleRenderer { let article: Article let articleStyle: ArticleStyle + static var faviconImgTagCache = [Feed: String]() lazy var longDateFormatter: DateFormatter = { let dateFormatter = DateFormatter() @@ -169,21 +170,11 @@ class ArticleRenderer { d["newsitem_description"] = body d["avatars"] = "" + var didAddAvatar = false if let avatar = avatarToUse() { let avatarHTML = avatar.html(dimension: 64) d["avatars"] = avatarHTML -// var ix = 0 -// let ct = avatars.count -// for avatar in avatars { -// avatarHTML += avatar.html(dimension: 64) -// if ix < ct - 1 { -// avatarHTML += " " -// } -// ix += 1 -// } -// if !avatarHTML.isEmpty { -// d["avatars"] = avatarHTML -// } + didAddAvatar = true } var feedLink = "" @@ -196,6 +187,13 @@ class ArticleRenderer { d["feedlink"] = feedLink d["feedlink_withfavicon"] = feedLink + d["favicon"] = "" + if !didAddAvatar, let feed = article.feed { + if let favicon = faviconImgTag(forFeed: feed) { + d["favicon"] = favicon + } + } + let longDate = longDateFormatter.string(from: article.logicalDatePublished) let mediumDate = mediumDateFormatter.string(from: article.logicalDatePublished) let shortDate = shortDateFormatter.string(from: article.logicalDatePublished) @@ -230,6 +228,30 @@ class ArticleRenderer { } } + private func faviconImgTag(forFeed feed: Feed) -> String? { + + if let cachedImgTag = ArticleRenderer.faviconImgTagCache[feed] { + return cachedImgTag + } + + if let favicon = appDelegate.faviconDownloader.favicon(for: feed) { + if let s = base64String(forImage: favicon) { + let imgTag = "" + ArticleRenderer.faviconImgTagCache[feed] = imgTag + return imgTag + } + } + + return nil + } + + private func base64String(forImage image: NSImage) -> String? { + + + let d = image.tiffRepresentation + return d?.base64EncodedString() + } + private func singleArticleSpecifiedAuthor() -> Author? { // The author of this article, if just one. diff --git a/Evergreen/Resources/styleSheet.css b/Evergreen/Resources/styleSheet.css index e7f4f811b..b63758b33 100644 --- a/Evergreen/Resources/styleSheet.css +++ b/Evergreen/Resources/styleSheet.css @@ -68,7 +68,7 @@ a:hover { .headerTable { widtdh: 100%; } -.headerContainer img { +.avatar img { border-radius: 7px; margin-right: 8px; } diff --git a/Evergreen/Resources/template.html b/Evergreen/Resources/template.html index 69cdaa44c..c9206c2e2 100644 --- a/Evergreen/Resources/template.html +++ b/Evergreen/Resources/template.html @@ -3,8 +3,8 @@
- - + +
[[avatars]][[feedlink]]
[[byline]]
[[avatars]][[favicon]] [[feedlink]]
[[byline]]