Add AuthorAvatarDownloader.
This commit is contained in:
parent
bfccda8c88
commit
441a8f49b3
@ -100,6 +100,7 @@
|
|||||||
84DAEE301F86CAFE0058304B /* OPMLImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */; };
|
84DAEE301F86CAFE0058304B /* OPMLImporter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */; };
|
||||||
84DAEE321F870B390058304B /* DockBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE311F870B390058304B /* DockBadge.swift */; };
|
84DAEE321F870B390058304B /* DockBadge.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DAEE311F870B390058304B /* DockBadge.swift */; };
|
||||||
84E46C7D1F75EF7B005ECFB3 /* AppDefaults.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E46C7C1F75EF7B005ECFB3 /* AppDefaults.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 */; };
|
84E95CF71FABB3C800552D99 /* FeedList.plist in Resources */ = {isa = PBXBuildFile; fileRef = 84E95CF61FABB3C800552D99 /* FeedList.plist */; };
|
||||||
84E95D241FB1087500552D99 /* ArticlePasteboardWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E95D231FB1087500552D99 /* ArticlePasteboardWriter.swift */; };
|
84E95D241FB1087500552D99 /* ArticlePasteboardWriter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84E95D231FB1087500552D99 /* ArticlePasteboardWriter.swift */; };
|
||||||
84EB381F1FBA8B9F000D2111 /* KeyboardShortcuts.html in Resources */ = {isa = PBXBuildFile; fileRef = 84EB38101FBA8B9F000D2111 /* KeyboardShortcuts.html */; };
|
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 = "<group>"; };
|
84DAEE2F1F86CAFE0058304B /* OPMLImporter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OPMLImporter.swift; sourceTree = "<group>"; };
|
||||||
84DAEE311F870B390058304B /* DockBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = DockBadge.swift; path = Evergreen/DockBadge.swift; sourceTree = "<group>"; };
|
84DAEE311F870B390058304B /* DockBadge.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = DockBadge.swift; path = Evergreen/DockBadge.swift; sourceTree = "<group>"; };
|
||||||
84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDefaults.swift; path = Evergreen/AppDefaults.swift; sourceTree = "<group>"; };
|
84E46C7C1F75EF7B005ECFB3 /* AppDefaults.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AppDefaults.swift; path = Evergreen/AppDefaults.swift; sourceTree = "<group>"; };
|
||||||
|
84E850851FCB60CE0072EA88 /* AuthorAvatarDownloader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthorAvatarDownloader.swift; sourceTree = "<group>"; };
|
||||||
84E95CF61FABB3C800552D99 /* FeedList.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = FeedList.plist; sourceTree = "<group>"; };
|
84E95CF61FABB3C800552D99 /* FeedList.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = FeedList.plist; sourceTree = "<group>"; };
|
||||||
84E95D231FB1087500552D99 /* ArticlePasteboardWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticlePasteboardWriter.swift; sourceTree = "<group>"; };
|
84E95D231FB1087500552D99 /* ArticlePasteboardWriter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticlePasteboardWriter.swift; sourceTree = "<group>"; };
|
||||||
84EB38101FBA8B9F000D2111 /* KeyboardShortcuts.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = KeyboardShortcuts.html; sourceTree = "<group>"; };
|
84EB38101FBA8B9F000D2111 /* KeyboardShortcuts.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = KeyboardShortcuts.html; sourceTree = "<group>"; };
|
||||||
@ -564,6 +566,7 @@
|
|||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
845213221FCA5B10003B6E93 /* ImageDownloader.swift */,
|
845213221FCA5B10003B6E93 /* ImageDownloader.swift */,
|
||||||
|
84E850851FCB60CE0072EA88 /* AuthorAvatarDownloader.swift */,
|
||||||
);
|
);
|
||||||
name = Images;
|
name = Images;
|
||||||
path = Evergreen/Images;
|
path = Evergreen/Images;
|
||||||
@ -1383,6 +1386,7 @@
|
|||||||
849A97A31ED9F180007D329B /* FolderTreeControllerDelegate.swift in Sources */,
|
849A97A31ED9F180007D329B /* FolderTreeControllerDelegate.swift in Sources */,
|
||||||
845A29091FC74B8E007B49E3 /* SingleFaviconDownloader.swift in Sources */,
|
845A29091FC74B8E007B49E3 /* SingleFaviconDownloader.swift in Sources */,
|
||||||
849A97851ED9ECCD007D329B /* PreferencesWindowController.swift in Sources */,
|
849A97851ED9ECCD007D329B /* PreferencesWindowController.swift in Sources */,
|
||||||
|
84E850861FCB60CE0072EA88 /* AuthorAvatarDownloader.swift in Sources */,
|
||||||
849A977A1ED9EC04007D329B /* TimelineTableCellView.swift in Sources */,
|
849A977A1ED9EC04007D329B /* TimelineTableCellView.swift in Sources */,
|
||||||
849A97761ED9EC04007D329B /* TimelineCellAppearance.swift in Sources */,
|
849A97761ED9EC04007D329B /* TimelineCellAppearance.swift in Sources */,
|
||||||
849A97A21ED9F180007D329B /* FeedTitleDownloader.swift in Sources */,
|
849A97A21ED9F180007D329B /* FeedTitleDownloader.swift in Sources */,
|
||||||
|
@ -23,6 +23,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
|
|||||||
var currentTheme: VSTheme!
|
var currentTheme: VSTheme!
|
||||||
var faviconDownloader: FaviconDownloader!
|
var faviconDownloader: FaviconDownloader!
|
||||||
var imageDownloader: ImageDownloader!
|
var imageDownloader: ImageDownloader!
|
||||||
|
var authorAvatarDownloader: AuthorAvatarDownloader!
|
||||||
var appName: String!
|
var appName: String!
|
||||||
var pseudoFeeds = [PseudoFeed]()
|
var pseudoFeeds = [PseudoFeed]()
|
||||||
|
|
||||||
@ -142,6 +143,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations,
|
|||||||
try! FileManager.default.createDirectory(at: imagesFolderURL, withIntermediateDirectories: true, attributes: nil)
|
try! FileManager.default.createDirectory(at: imagesFolderURL, withIntermediateDirectories: true, attributes: nil)
|
||||||
imageDownloader = ImageDownloader(folder: imagesFolder)
|
imageDownloader = ImageDownloader(folder: imagesFolder)
|
||||||
|
|
||||||
|
authorAvatarDownloader = AuthorAvatarDownloader(imageDownloader: imageDownloader)
|
||||||
|
|
||||||
let todayFeed = SmartFeed(delegate: TodayFeedDelegate())
|
let todayFeed = SmartFeed(delegate: TodayFeedDelegate())
|
||||||
let unreadFeed = UnreadFeed()
|
let unreadFeed = UnreadFeed()
|
||||||
let starredFeed = SmartFeed(delegate: StarredFeedDelegate())
|
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))
|
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 {
|
DispatchQueue.main.async {
|
||||||
self.unreadCount = AccountManager.shared.unreadCount
|
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
|
// MARK: Main Window
|
||||||
|
|
||||||
func windowControllerWithName(_ storyboardName: String) -> NSWindowController {
|
func windowControllerWithName(_ storyboardName: String) -> NSWindowController {
|
||||||
|
28
Evergreen/Images/AuthorAvatarDownloader.swift
Normal file
28
Evergreen/Images/AuthorAvatarDownloader.swift
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
@ -452,10 +452,7 @@ extension TimelineViewController: NSTableViewDelegate {
|
|||||||
|
|
||||||
private func avatarForAuthor(_ author: Author) -> NSImage? {
|
private func avatarForAuthor(_ author: Author) -> NSImage? {
|
||||||
|
|
||||||
if let url = author.avatarURL {
|
return appDelegate.authorAvatarDownloader.image(for: author)
|
||||||
return appDelegate.imageDownloader.image(for: url)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private func featuredImageFor(_ article: Article) -> NSImage? {
|
private func featuredImageFor(_ article: Article) -> NSImage? {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user