60 lines
1.7 KiB
Swift
60 lines
1.7 KiB
Swift
//
|
|
// ArticleIconImageLoader.swift
|
|
// NetNewsWire
|
|
//
|
|
// Created by Maurice Parker on 7/1/20.
|
|
// Copyright © 2020 Ranchero Software. All rights reserved.
|
|
//
|
|
|
|
import Foundation
|
|
import Account
|
|
import Articles
|
|
|
|
final class ArticleIconImageLoader: ObservableObject {
|
|
|
|
private var article: Article?
|
|
|
|
@Published var image: IconImage?
|
|
|
|
init() {
|
|
NotificationCenter.default.addObserver(self, selector: #selector(faviconDidBecomeAvailable(_:)), name: .FaviconDidBecomeAvailable, object: nil)
|
|
NotificationCenter.default.addObserver(self, selector: #selector(webFeedIconDidBecomeAvailable(_:)), name: .WebFeedIconDidBecomeAvailable, object: nil)
|
|
NotificationCenter.default.addObserver(self, selector: #selector(avatarDidBecomeAvailable(_:)), name: .AvatarDidBecomeAvailable, object: nil)
|
|
}
|
|
|
|
func loadImage(for article: Article) {
|
|
guard image == nil else { return }
|
|
self.article = article
|
|
image = article.iconImage()
|
|
}
|
|
|
|
}
|
|
|
|
private extension ArticleIconImageLoader {
|
|
|
|
@objc func faviconDidBecomeAvailable(_ note: Notification) {
|
|
guard let article = article else { return }
|
|
image = article.iconImage()
|
|
}
|
|
|
|
@objc func webFeedIconDidBecomeAvailable(_ note: Notification) {
|
|
guard let article = article, let noteFeed = note.userInfo?[UserInfoKey.webFeed] as? WebFeed, noteFeed == article.webFeed else {
|
|
return
|
|
}
|
|
image = article.iconImage()
|
|
}
|
|
|
|
@objc func avatarDidBecomeAvailable(_ note: Notification) {
|
|
guard let article = article, let authors = article.authors, let avatarURL = note.userInfo?[UserInfoKey.url] as? String else {
|
|
return
|
|
}
|
|
|
|
for author in authors {
|
|
if author.avatarURL == avatarURL {
|
|
image = article.iconImage()
|
|
return
|
|
}
|
|
}
|
|
}
|
|
}
|