From 441a8f49b366f8637649382d906ece4a125598f6 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 26 Nov 2017 13:16:32 -0800 Subject: [PATCH] Add AuthorAvatarDownloader. --- Evergreen.xcodeproj/project.pbxproj | 4 +++ Evergreen/AppDelegate.swift | 13 +++++++++ Evergreen/Images/AuthorAvatarDownloader.swift | 28 +++++++++++++++++++ .../Timeline/TimelineViewController.swift | 5 +--- 4 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 Evergreen/Images/AuthorAvatarDownloader.swift diff --git a/Evergreen.xcodeproj/project.pbxproj b/Evergreen.xcodeproj/project.pbxproj index 6c76994be..cc77c2ec0 100644 --- a/Evergreen.xcodeproj/project.pbxproj +++ b/Evergreen.xcodeproj/project.pbxproj @@ -100,6 +100,7 @@ 84DAEE301F86CAFE0058304B /* OPMLImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */; }; 84DAEE321F870B390058304B /* DockBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE311F870B390058304B /* DockBadge.swift */; }; 84E46C7D1F75EF7B005ECFB3 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */; }; + 84E850861FCB60CE0072EA88 /* AuthorAvatarDownloader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E850851FCB60CE0072EA88 /* AuthorAvatarDownloader.swift */; }; 84E95CF71FABB3C800552D99 /* FeedList.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84E95CF61FABB3C800552D99 /* FeedList.plist */; }; 84E95D241FB1087500552D99 /* ArticlePasteboardWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E95D231FB1087500552D99 /* ArticlePasteboardWriter.swift */; }; 84EB381F1FBA8B9F000D2111 /* KeyboardShortcuts.html in Resources */ = {isa = PBXBuildFile; fileRef = 84EB38101FBA8B9F000D2111 /* KeyboardShortcuts.html */; }; @@ -489,6 +490,7 @@ 84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OPMLImporter.swift; sourceTree = ""; }; 84DAEE311F870B390058304B /* DockBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = DockBadge.swift; path = Evergreen/DockBadge.swift; sourceTree = ""; }; 84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDefaults.swift; path = Evergreen/AppDefaults.swift; sourceTree = ""; }; + 84E850851FCB60CE0072EA88 /* AuthorAvatarDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorAvatarDownloader.swift; sourceTree = ""; }; 84E95CF61FABB3C800552D99 /* FeedList.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = FeedList.plist; sourceTree = ""; }; 84E95D231FB1087500552D99 /* ArticlePasteboardWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticlePasteboardWriter.swift; sourceTree = ""; }; 84EB38101FBA8B9F000D2111 /* KeyboardShortcuts.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = KeyboardShortcuts.html; sourceTree = ""; }; @@ -564,6 +566,7 @@ isa = PBXGroup; children = ( 845213221FCA5B10003B6E93 /* ImageDownloader.swift */, + 84E850851FCB60CE0072EA88 /* AuthorAvatarDownloader.swift */, ); name = Images; path = Evergreen/Images; @@ -1383,6 +1386,7 @@ 849A97A31ED9F180007D329B /* FolderTreeControllerDelegate.swift in Sources */, 845A29091FC74B8E007B49E3 /* SingleFaviconDownloader.swift in Sources */, 849A97851ED9ECCD007D329B /* PreferencesWindowController.swift in Sources */, + 84E850861FCB60CE0072EA88 /* AuthorAvatarDownloader.swift in Sources */, 849A977A1ED9EC04007D329B /* TimelineTableCellView.swift in Sources */, 849A97761ED9EC04007D329B /* TimelineCellAppearance.swift in Sources */, 849A97A21ED9F180007D329B /* FeedTitleDownloader.swift in Sources */, diff --git a/Evergreen/AppDelegate.swift b/Evergreen/AppDelegate.swift index 94c0b6eab..f43c31226 100644 --- a/Evergreen/AppDelegate.swift +++ b/Evergreen/AppDelegate.swift @@ -23,6 +23,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, var currentTheme: VSTheme! var faviconDownloader: FaviconDownloader! var imageDownloader: ImageDownloader! + var authorAvatarDownloader: AuthorAvatarDownloader! var appName: String! var pseudoFeeds = [PseudoFeed]() @@ -142,6 +143,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, try! FileManager.default.createDirectory(at: imagesFolderURL, withIntermediateDirectories: true, attributes: nil) imageDownloader = ImageDownloader(folder: imagesFolder) + authorAvatarDownloader = AuthorAvatarDownloader(imageDownloader: imageDownloader) + let todayFeed = SmartFeed(delegate: TodayFeedDelegate()) let unreadFeed = UnreadFeed() let starredFeed = SmartFeed(delegate: StarredFeedDelegate()) @@ -157,6 +160,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, NSAppleEventManager.shared().setEventHandler(self, andSelector: #selector(AppDelegate.getURL(_:_:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL)) + NotificationCenter.default.addObserver(self, selector: #selector(feedSettingDidChange(_:)), name: .FeedSettingDidChange, object: nil) + DispatchQueue.main.async { self.unreadCount = AccountManager.shared.unreadCount } @@ -206,6 +211,14 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, } } + @objc func feedSettingDidChange(_ note: Notification) { + + guard let feed = note.object as? Feed else { + return + } + let _ = faviconDownloader.favicon(for: feed) + } + // MARK: Main Window func windowControllerWithName(_ storyboardName: String) -> NSWindowController { diff --git a/Evergreen/Images/AuthorAvatarDownloader.swift b/Evergreen/Images/AuthorAvatarDownloader.swift new file mode 100644 index 000000000..2d103d8a3 --- /dev/null +++ b/Evergreen/Images/AuthorAvatarDownloader.swift @@ -0,0 +1,28 @@ +// +// AuthorAvatarDownloader.swift +// Evergreen +// +// Created by Brent Simmons on 11/26/17. +// Copyright © 2017 Ranchero Software. All rights reserved. +// + +import Cocoa +import Data + +final class AuthorAvatarDownloader { + + private let imageDownloader: ImageDownloader + + init(imageDownloader: ImageDownloader) { + + self.imageDownloader = imageDownloader + } + + func image(for author: Author) -> NSImage? { + + guard let avatarURL = author.avatarURL else { + return nil + } + return imageDownloader.image(for: avatarURL) + } +} diff --git a/Evergreen/MainWindow/Timeline/TimelineViewController.swift b/Evergreen/MainWindow/Timeline/TimelineViewController.swift index 02a4a1e49..0338dc4ed 100644 --- a/Evergreen/MainWindow/Timeline/TimelineViewController.swift +++ b/Evergreen/MainWindow/Timeline/TimelineViewController.swift @@ -452,10 +452,7 @@ extension TimelineViewController: NSTableViewDelegate { private func avatarForAuthor(_ author: Author) -> NSImage? { - if let url = author.avatarURL { - return appDelegate.imageDownloader.image(for: url) - } - return nil + return appDelegate.authorAvatarDownloader.image(for: author) } private func featuredImageFor(_ article: Article) -> NSImage? {