mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Use ItemIdentifier and itemID instead of FeedIdentifier and feedID. (FeedIdentifier was renamed to ItemIdentifier.)
This commit is contained in:
@@ -172,11 +172,11 @@ private extension ActivityManager {
|
||||
activity.keywords = Set(makeKeywords(title))
|
||||
activity.isEligibleForSearch = true
|
||||
|
||||
let articleFetcherIdentifierUserInfo = feed.feedID?.userInfo ?? [AnyHashable: Any]()
|
||||
activity.userInfo = [UserInfoKey.feedIdentifier: articleFetcherIdentifierUserInfo]
|
||||
let articleFetcherIdentifierUserInfo = feed.itemID?.userInfo ?? [AnyHashable: Any]()
|
||||
activity.userInfo = [UserInfoKey.itemIdentifier: articleFetcherIdentifierUserInfo]
|
||||
activity.requiredUserInfoKeys = Set(activity.userInfo!.keys.map { $0 as! String })
|
||||
|
||||
activity.persistentIdentifier = feed.feedID?.description ?? ""
|
||||
activity.persistentIdentifier = feed.itemID?.description ?? ""
|
||||
|
||||
#if os(iOS)
|
||||
activity.suggestedInvocationPhrase = title
|
||||
@@ -192,9 +192,9 @@ private extension ActivityManager {
|
||||
activity.title = ArticleStringFormatter.truncatedTitle(article)
|
||||
|
||||
if let feed = feed {
|
||||
let articleFetcherIdentifierUserInfo = feed.feedID?.userInfo ?? [AnyHashable: Any]()
|
||||
let articleFetcherIdentifierUserInfo = feed.itemID?.userInfo ?? [AnyHashable: Any]()
|
||||
let articlePathUserInfo = article.pathUserInfo
|
||||
activity.userInfo = [UserInfoKey.feedIdentifier: articleFetcherIdentifierUserInfo, UserInfoKey.articlePath: articlePathUserInfo]
|
||||
activity.userInfo = [UserInfoKey.itemIdentifier: articleFetcherIdentifierUserInfo, UserInfoKey.articlePath: articlePathUserInfo]
|
||||
} else {
|
||||
activity.userInfo = [UserInfoKey.articlePath: article.pathUserInfo]
|
||||
}
|
||||
|
||||
@@ -14,35 +14,35 @@ class IconImageCache {
|
||||
|
||||
static var shared = IconImageCache()
|
||||
|
||||
private var smartFeedIconImageCache = [FeedIdentifier: IconImage]()
|
||||
private var webFeedIconImageCache = [FeedIdentifier: IconImage]()
|
||||
private var faviconImageCache = [FeedIdentifier: IconImage]()
|
||||
private var smallIconImageCache = [FeedIdentifier: IconImage]()
|
||||
private var smartFeedIconImageCache = [ItemIdentifier: IconImage]()
|
||||
private var webFeedIconImageCache = [ItemIdentifier: IconImage]()
|
||||
private var faviconImageCache = [ItemIdentifier: IconImage]()
|
||||
private var smallIconImageCache = [ItemIdentifier: IconImage]()
|
||||
private var authorIconImageCache = [Author: IconImage]()
|
||||
|
||||
func imageFor(_ feedID: FeedIdentifier) -> IconImage? {
|
||||
if let smartFeed = SmartFeedsController.shared.find(by: feedID) {
|
||||
func imageFor(_ itemID: ItemIdentifier) -> IconImage? {
|
||||
if let smartFeed = SmartFeedsController.shared.find(by: itemID) {
|
||||
return imageForFeed(smartFeed)
|
||||
}
|
||||
if let feed = AccountManager.shared.existingFeed(with: feedID) {
|
||||
if let feed = AccountManager.shared.existingFeed(with: itemID) {
|
||||
return imageForFeed(feed)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func imageForFeed(_ feed: FeedProtocol) -> IconImage? {
|
||||
guard let feedID = feed.feedID else {
|
||||
guard let itemID = feed.itemID else {
|
||||
return nil
|
||||
}
|
||||
|
||||
if let smartFeed = feed as? PseudoFeed {
|
||||
return imageForSmartFeed(smartFeed, feedID)
|
||||
return imageForSmartFeed(smartFeed, itemID)
|
||||
}
|
||||
if let webFeed = feed as? WebFeed, let iconImage = imageForWebFeed(webFeed, feedID) {
|
||||
if let webFeed = feed as? WebFeed, let iconImage = imageForWebFeed(webFeed, itemID) {
|
||||
return iconImage
|
||||
}
|
||||
if let smallIconProvider = feed as? SmallIconProvider {
|
||||
return imageForSmallIconProvider(smallIconProvider, feedID)
|
||||
return imageForSmallIconProvider(smallIconProvider, itemID)
|
||||
}
|
||||
|
||||
return nil
|
||||
@@ -59,51 +59,51 @@ class IconImageCache {
|
||||
}
|
||||
|
||||
func emptyCache() {
|
||||
smartFeedIconImageCache = [FeedIdentifier: IconImage]()
|
||||
webFeedIconImageCache = [FeedIdentifier: IconImage]()
|
||||
faviconImageCache = [FeedIdentifier: IconImage]()
|
||||
smallIconImageCache = [FeedIdentifier: IconImage]()
|
||||
smartFeedIconImageCache = [ItemIdentifier: IconImage]()
|
||||
webFeedIconImageCache = [ItemIdentifier: IconImage]()
|
||||
faviconImageCache = [ItemIdentifier: IconImage]()
|
||||
smallIconImageCache = [ItemIdentifier: IconImage]()
|
||||
authorIconImageCache = [Author: IconImage]()
|
||||
}
|
||||
}
|
||||
|
||||
private extension IconImageCache {
|
||||
|
||||
func imageForSmartFeed(_ smartFeed: PseudoFeed, _ feedID: FeedIdentifier) -> IconImage? {
|
||||
if let iconImage = smartFeedIconImageCache[feedID] {
|
||||
func imageForSmartFeed(_ smartFeed: PseudoFeed, _ itemID: ItemIdentifier) -> IconImage? {
|
||||
if let iconImage = smartFeedIconImageCache[itemID] {
|
||||
return iconImage
|
||||
}
|
||||
if let iconImage = smartFeed.smallIcon {
|
||||
smartFeedIconImageCache[feedID] = iconImage
|
||||
smartFeedIconImageCache[itemID] = iconImage
|
||||
return iconImage
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func imageForWebFeed(_ webFeed: WebFeed, _ feedID: FeedIdentifier) -> IconImage? {
|
||||
if let iconImage = webFeedIconImageCache[feedID] {
|
||||
func imageForWebFeed(_ webFeed: WebFeed, _ itemID: ItemIdentifier) -> IconImage? {
|
||||
if let iconImage = webFeedIconImageCache[itemID] {
|
||||
return iconImage
|
||||
}
|
||||
if let iconImage = appDelegate.webFeedIconDownloader.icon(for: webFeed) {
|
||||
webFeedIconImageCache[feedID] = iconImage
|
||||
webFeedIconImageCache[itemID] = iconImage
|
||||
return iconImage
|
||||
}
|
||||
if let faviconImage = faviconImageCache[feedID] {
|
||||
if let faviconImage = faviconImageCache[itemID] {
|
||||
return faviconImage
|
||||
}
|
||||
if let faviconImage = appDelegate.faviconDownloader.faviconAsIcon(for: webFeed) {
|
||||
faviconImageCache[feedID] = faviconImage
|
||||
faviconImageCache[itemID] = faviconImage
|
||||
return faviconImage
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func imageForSmallIconProvider(_ provider: SmallIconProvider, _ feedID: FeedIdentifier) -> IconImage? {
|
||||
if let iconImage = smallIconImageCache[feedID] {
|
||||
func imageForSmallIconProvider(_ provider: SmallIconProvider, _ itemID: ItemIdentifier) -> IconImage? {
|
||||
if let iconImage = smallIconImageCache[itemID] {
|
||||
return iconImage
|
||||
}
|
||||
if let iconImage = provider.smallIcon {
|
||||
smallIconImageCache[feedID] = iconImage
|
||||
smallIconImageCache[itemID] = iconImage
|
||||
return iconImage
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -14,8 +14,8 @@ import ArticlesDatabase
|
||||
|
||||
struct SearchFeedDelegate: SmartFeedDelegate {
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
return FeedIdentifier.smartFeed(String(describing: SearchFeedDelegate.self))
|
||||
var itemID: ItemIdentifier? {
|
||||
return ItemIdentifier.smartFeed(String(describing: SearchFeedDelegate.self))
|
||||
}
|
||||
|
||||
var nameForDisplay: String {
|
||||
|
||||
@@ -14,8 +14,8 @@ import ArticlesDatabase
|
||||
|
||||
struct SearchTimelineFeedDelegate: SmartFeedDelegate {
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
return FeedIdentifier.smartFeed(String(describing: SearchTimelineFeedDelegate.self))
|
||||
var itemID: ItemIdentifier? {
|
||||
return ItemIdentifier.smartFeed(String(describing: SearchTimelineFeedDelegate.self))
|
||||
}
|
||||
|
||||
var nameForDisplay: String {
|
||||
|
||||
@@ -20,8 +20,8 @@ final class SmartFeed: PseudoFeed {
|
||||
return .none
|
||||
}
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
delegate.feedID
|
||||
var itemID: ItemIdentifier? {
|
||||
delegate.itemID
|
||||
}
|
||||
|
||||
var nameForDisplay: String {
|
||||
|
||||
@@ -12,7 +12,7 @@ import Articles
|
||||
import ArticlesDatabase
|
||||
import RSCore
|
||||
|
||||
protocol SmartFeedDelegate: FeedIdentifiable, DisplayNameProvider, ArticleFetcher, SmallIconProvider {
|
||||
protocol SmartFeedDelegate: ItemIdentifiable, DisplayNameProvider, ArticleFetcher, SmallIconProvider {
|
||||
var fetchType: FetchType { get }
|
||||
func fetchUnreadCount(for: Account, completion: @escaping SingleUnreadCountCompletionBlock)
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ final class SmartFeedsController: DisplayNameProvider, ContainerIdentifiable {
|
||||
self.smartFeeds = [todayFeed, unreadFeed, starredFeed]
|
||||
}
|
||||
|
||||
func find(by identifier: FeedIdentifier) -> PseudoFeed? {
|
||||
func find(by identifier: ItemIdentifier) -> PseudoFeed? {
|
||||
switch identifier {
|
||||
case .smartFeed(let stringIdentifer):
|
||||
switch stringIdentifer {
|
||||
|
||||
@@ -16,8 +16,8 @@ import Account
|
||||
|
||||
struct StarredFeedDelegate: SmartFeedDelegate {
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
return FeedIdentifier.smartFeed(String(describing: StarredFeedDelegate.self))
|
||||
var itemID: ItemIdentifier? {
|
||||
return ItemIdentifier.smartFeed(String(describing: StarredFeedDelegate.self))
|
||||
}
|
||||
|
||||
let nameForDisplay = NSLocalizedString("smartfeed.title.starred", comment: "Starred pseudo-feed title")
|
||||
|
||||
@@ -14,8 +14,8 @@ import Account
|
||||
|
||||
struct TodayFeedDelegate: SmartFeedDelegate {
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
return FeedIdentifier.smartFeed(String(describing: TodayFeedDelegate.self))
|
||||
var itemID: ItemIdentifier? {
|
||||
return ItemIdentifier.smartFeed(String(describing: TodayFeedDelegate.self))
|
||||
}
|
||||
|
||||
let nameForDisplay = NSLocalizedString("smartfeed.title.today", comment: "Today pseudo-feed title")
|
||||
|
||||
@@ -26,8 +26,8 @@ final class UnreadFeed: PseudoFeed {
|
||||
return .alwaysRead
|
||||
}
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
return FeedIdentifier.smartFeed(String(describing: UnreadFeed.self))
|
||||
var itemID: ItemIdentifier? {
|
||||
return ItemIdentifier.smartFeed(String(describing: UnreadFeed.self))
|
||||
}
|
||||
|
||||
let nameForDisplay = NSLocalizedString("smartfeed.title.allunread", comment: "All Unread pseudo-feed title")
|
||||
|
||||
@@ -19,13 +19,13 @@ typealias FetchRequestOperationResultBlock = (Set<Article>, FetchRequestOperatio
|
||||
final class FetchRequestOperation {
|
||||
|
||||
let id: Int
|
||||
let readFilterEnabledTable: [FeedIdentifier: Bool]
|
||||
let readFilterEnabledTable: [ItemIdentifier: Bool]
|
||||
let resultBlock: FetchRequestOperationResultBlock
|
||||
var isCanceled = false
|
||||
var isFinished = false
|
||||
private let fetchers: [ArticleFetcher]
|
||||
|
||||
init(id: Int, readFilterEnabledTable: [FeedIdentifier: Bool], fetchers: [ArticleFetcher], resultBlock: @escaping FetchRequestOperationResultBlock) {
|
||||
init(id: Int, readFilterEnabledTable: [ItemIdentifier: Bool], fetchers: [ArticleFetcher], resultBlock: @escaping FetchRequestOperationResultBlock) {
|
||||
precondition(Thread.isMainThread)
|
||||
self.id = id
|
||||
self.readFilterEnabledTable = readFilterEnabledTable
|
||||
|
||||
@@ -13,15 +13,15 @@ import Account
|
||||
|
||||
final class FeedTreeControllerDelegate: TreeControllerDelegate {
|
||||
|
||||
private var filterExceptions = Set<FeedIdentifier>()
|
||||
private var filterExceptions = Set<ItemIdentifier>()
|
||||
var isReadFiltered = false
|
||||
|
||||
func addFilterException(_ feedID: FeedIdentifier) {
|
||||
filterExceptions.insert(feedID)
|
||||
func addFilterException(_ itemID: ItemIdentifier) {
|
||||
filterExceptions.insert(itemID)
|
||||
}
|
||||
|
||||
func resetFilterExceptions() {
|
||||
filterExceptions = Set<FeedIdentifier>()
|
||||
filterExceptions = Set<ItemIdentifier>()
|
||||
}
|
||||
|
||||
func treeController(treeController: TreeController, childNodesFor node: Node) -> [Node]? {
|
||||
@@ -67,14 +67,14 @@ private extension FeedTreeControllerDelegate {
|
||||
var children = [AnyObject]()
|
||||
|
||||
for webFeed in container.topLevelWebFeeds {
|
||||
if let feedID = webFeed.feedID, !(!filterExceptions.contains(feedID) && isReadFiltered && webFeed.unreadCount == 0) {
|
||||
if let itemID = webFeed.itemID, !(!filterExceptions.contains(itemID) && isReadFiltered && webFeed.unreadCount == 0) {
|
||||
children.append(webFeed)
|
||||
}
|
||||
}
|
||||
|
||||
if let folders = container.folders {
|
||||
for folder in folders {
|
||||
if let feedID = folder.feedID, !(!filterExceptions.contains(feedID) && isReadFiltered && folder.unreadCount == 0) {
|
||||
if let itemID = folder.itemID, !(!filterExceptions.contains(itemID) && isReadFiltered && folder.unreadCount == 0) {
|
||||
children.append(folder)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ struct UserInfoKey {
|
||||
static let webFeed = "webFeed"
|
||||
static let url = "url"
|
||||
static let articlePath = "articlePath"
|
||||
static let feedIdentifier = "feedIdentifier"
|
||||
static let itemIdentifier = "itemIdentifier"
|
||||
|
||||
static let windowState = "windowState"
|
||||
static let windowFullScreenState = "windowFullScreenState"
|
||||
|
||||
Reference in New Issue
Block a user