Use sidebarItemID in place of feedID or feedIdentifier when the type is SidebarItemID.

This commit is contained in:
Brent Simmons 2024-02-26 21:47:24 -08:00
parent f03356151e
commit 0929aedd46
4 changed files with 36 additions and 36 deletions

View File

@ -287,8 +287,8 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr
} }
for i in 0..<readArticlesFilterStateKeys.count { for i in 0..<readArticlesFilterStateKeys.count {
if let feedIdentifier = SidebarItemIdentifier(userInfo: readArticlesFilterStateKeys[i]) { if let sidebarItemID = SidebarItemIdentifier(userInfo: readArticlesFilterStateKeys[i]) {
readFilterEnabledTable[feedIdentifier] = readArticlesFilterStateValues[i] readFilterEnabledTable[sidebarItemID] = readArticlesFilterStateValues[i]
} }
} }

View File

@ -20,11 +20,11 @@ class IconImageCache {
private var smallIconImageCache = [SidebarItemIdentifier: IconImage]() private var smallIconImageCache = [SidebarItemIdentifier: IconImage]()
private var authorIconImageCache = [Author: IconImage]() private var authorIconImageCache = [Author: IconImage]()
func imageFor(_ feedID: SidebarItemIdentifier) -> IconImage? { func imageFor(_ sidebarItemID: SidebarItemIdentifier) -> IconImage? {
if let smartFeed = SmartFeedsController.shared.find(by: feedID) { if let smartFeed = SmartFeedsController.shared.find(by: sidebarItemID) {
return imageForFeed(smartFeed) return imageForFeed(smartFeed)
} }
if let feed = AccountManager.shared.existingSidebarItem(with: feedID) { if let feed = AccountManager.shared.existingSidebarItem(with: sidebarItemID) {
return imageForFeed(feed) return imageForFeed(feed)
} }
return nil return nil
@ -69,41 +69,41 @@ class IconImageCache {
private extension IconImageCache { private extension IconImageCache {
func imageForSmartFeed(_ smartFeed: PseudoFeed, _ feedID: SidebarItemIdentifier) -> IconImage? { func imageForSmartFeed(_ smartFeed: PseudoFeed, _ sidebarItemID: SidebarItemIdentifier) -> IconImage? {
if let iconImage = smartFeedIconImageCache[feedID] { if let iconImage = smartFeedIconImageCache[sidebarItemID] {
return iconImage return iconImage
} }
if let iconImage = smartFeed.smallIcon { if let iconImage = smartFeed.smallIcon {
smartFeedIconImageCache[feedID] = iconImage smartFeedIconImageCache[sidebarItemID] = iconImage
return iconImage return iconImage
} }
return nil return nil
} }
func imageForFeed(_ feed: Feed, _ feedID: SidebarItemIdentifier) -> IconImage? { func imageForFeed(_ feed: Feed, _ sidebarItemID: SidebarItemIdentifier) -> IconImage? {
if let iconImage = feedIconImageCache[feedID] { if let iconImage = feedIconImageCache[sidebarItemID] {
return iconImage return iconImage
} }
if let iconImage = appDelegate.feedIconDownloader.icon(for: feed) { if let iconImage = appDelegate.feedIconDownloader.icon(for: feed) {
feedIconImageCache[feedID] = iconImage feedIconImageCache[sidebarItemID] = iconImage
return iconImage return iconImage
} }
if let faviconImage = faviconImageCache[feedID] { if let faviconImage = faviconImageCache[sidebarItemID] {
return faviconImage return faviconImage
} }
if let faviconImage = appDelegate.faviconDownloader.faviconAsIcon(for: feed) { if let faviconImage = appDelegate.faviconDownloader.faviconAsIcon(for: feed) {
faviconImageCache[feedID] = faviconImage faviconImageCache[sidebarItemID] = faviconImage
return faviconImage return faviconImage
} }
return nil return nil
} }
func imageForSmallIconProvider(_ provider: SmallIconProvider, _ feedID: SidebarItemIdentifier) -> IconImage? { func imageForSmallIconProvider(_ provider: SmallIconProvider, _ sidebarItemID: SidebarItemIdentifier) -> IconImage? {
if let iconImage = smallIconImageCache[feedID] { if let iconImage = smallIconImageCache[sidebarItemID] {
return iconImage return iconImage
} }
if let iconImage = provider.smallIcon { if let iconImage = provider.smallIcon {
smallIconImageCache[feedID] = iconImage smallIconImageCache[sidebarItemID] = iconImage
return iconImage return iconImage
} }
return nil return nil

View File

@ -16,8 +16,8 @@ final class FeedTreeControllerDelegate: TreeControllerDelegate {
private var filterExceptions = Set<SidebarItemIdentifier>() private var filterExceptions = Set<SidebarItemIdentifier>()
var isReadFiltered = false var isReadFiltered = false
func addFilterException(_ feedID: SidebarItemIdentifier) { func addFilterException(_ sidebarItemID: SidebarItemIdentifier) {
filterExceptions.insert(feedID) filterExceptions.insert(sidebarItemID)
} }
func resetFilterExceptions() { func resetFilterExceptions() {

View File

@ -33,15 +33,15 @@ enum ShowFeedName {
struct FeedNode: Hashable { struct FeedNode: Hashable {
var node: Node var node: Node
var feedID: SidebarItemIdentifier var sidebarItemID: SidebarItemIdentifier
init(_ node: Node) { init(_ node: Node) {
self.node = node self.node = node
self.feedID = (node.representedObject as! SidebarItem).sidebarItemID! self.sidebarItemID = (node.representedObject as! SidebarItem).sidebarItemID!
} }
func hash(into hasher: inout Hasher) { func hash(into hasher: inout Hasher) {
hasher.combine(feedID) hasher.combine(sidebarItemID)
} }
} }
@ -355,8 +355,8 @@ class SceneCoordinator: NSObject, UndoableCommandRunner {
if let readArticlesFilterState = windowState[UserInfoKey.readArticlesFilterState] as? [[AnyHashable: AnyHashable]: Bool] { if let readArticlesFilterState = windowState[UserInfoKey.readArticlesFilterState] as? [[AnyHashable: AnyHashable]: Bool] {
for key in readArticlesFilterState.keys { for key in readArticlesFilterState.keys {
if let feedIdentifier = SidebarItemIdentifier(userInfo: key) { if let sidebarItemID = SidebarItemIdentifier(userInfo: key) {
readFilterEnabledTable[feedIdentifier] = readArticlesFilterState[key] readFilterEnabledTable[sidebarItemID] = readArticlesFilterState[key]
} }
} }
} }
@ -2209,16 +2209,16 @@ private extension SceneCoordinator {
func handleSelectFeed(_ userInfo: [AnyHashable : Any]?) { func handleSelectFeed(_ userInfo: [AnyHashable : Any]?) {
guard let userInfo = userInfo, guard let userInfo = userInfo,
let feedIdentifierUserInfo = userInfo[UserInfoKey.feedIdentifier] as? [AnyHashable : AnyHashable], let feedIdentifierUserInfo = userInfo[UserInfoKey.feedIdentifier] as? [AnyHashable : AnyHashable],
let feedIdentifier = SidebarItemIdentifier(userInfo: feedIdentifierUserInfo) else { let sidebarItemID = SidebarItemIdentifier(userInfo: feedIdentifierUserInfo) else {
return return
} }
treeControllerDelegate.addFilterException(feedIdentifier) treeControllerDelegate.addFilterException(sidebarItemID)
switch feedIdentifier { switch sidebarItemID {
case .smartFeed: case .smartFeed:
guard let smartFeed = SmartFeedsController.shared.find(by: feedIdentifier) else { return } guard let smartFeed = SmartFeedsController.shared.find(by: sidebarItemID) else { return }
markExpanded(SmartFeedsController.shared) markExpanded(SmartFeedsController.shared)
rebuildBackingStores(initialLoad: true, completion: { rebuildBackingStores(initialLoad: true, completion: {
@ -2294,29 +2294,29 @@ private extension SceneCoordinator {
func restoreFeedSelection(_ userInfo: [AnyHashable : Any], accountID: String, feedID: String, articleID: String) -> Bool { func restoreFeedSelection(_ userInfo: [AnyHashable : Any], accountID: String, feedID: String, articleID: String) -> Bool {
guard let feedIdentifierUserInfo = userInfo[UserInfoKey.feedIdentifier] as? [AnyHashable : AnyHashable], guard let feedIdentifierUserInfo = userInfo[UserInfoKey.feedIdentifier] as? [AnyHashable : AnyHashable],
let feedIdentifier = SidebarItemIdentifier(userInfo: feedIdentifierUserInfo), let sidebarItemID = SidebarItemIdentifier(userInfo: feedIdentifierUserInfo),
let isShowingExtractedArticle = userInfo[UserInfoKey.isShowingExtractedArticle] as? Bool, let isShowingExtractedArticle = userInfo[UserInfoKey.isShowingExtractedArticle] as? Bool,
let articleWindowScrollY = userInfo[UserInfoKey.articleWindowScrollY] as? Int else { let articleWindowScrollY = userInfo[UserInfoKey.articleWindowScrollY] as? Int else {
return false return false
} }
switch feedIdentifier { switch sidebarItemID {
case .script: case .script:
return false return false
case .smartFeed, .folder: case .smartFeed, .folder:
let found = selectFeedAndArticle(feedIdentifier: feedIdentifier, articleID: articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY) let found = selectFeedAndArticle(sidebarItemID: sidebarItemID, articleID: articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
if found { if found {
treeControllerDelegate.addFilterException(feedIdentifier) treeControllerDelegate.addFilterException(sidebarItemID)
} }
return found return found
case .feed: case .feed:
let found = selectFeedAndArticle(feedIdentifier: feedIdentifier, articleID: articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY) let found = selectFeedAndArticle(sidebarItemID: sidebarItemID, articleID: articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
if found { if found {
treeControllerDelegate.addFilterException(feedIdentifier) treeControllerDelegate.addFilterException(sidebarItemID)
if let feedNode = nodeFor(sidebarItemID: feedIdentifier), let folder = feedNode.parent?.representedObject as? Folder, let folderFeedID = folder.sidebarItemID { if let feedNode = nodeFor(sidebarItemID: sidebarItemID), let folder = feedNode.parent?.representedObject as? Folder, let folderFeedID = folder.sidebarItemID {
treeControllerDelegate.addFilterException(folderFeedID) treeControllerDelegate.addFilterException(folderFeedID)
} }
} }
@ -2352,8 +2352,8 @@ private extension SceneCoordinator {
return nil return nil
} }
func selectFeedAndArticle(feedIdentifier: SidebarItemIdentifier, articleID: String, isShowingExtractedArticle: Bool, articleWindowScrollY: Int) -> Bool { func selectFeedAndArticle(sidebarItemID: SidebarItemIdentifier, articleID: String, isShowingExtractedArticle: Bool, articleWindowScrollY: Int) -> Bool {
guard let feedNode = nodeFor(sidebarItemID: feedIdentifier), let feedIndexPath = indexPathFor(feedNode) else { return false } guard let feedNode = nodeFor(sidebarItemID: sidebarItemID), let feedIndexPath = indexPathFor(feedNode) else { return false }
selectFeed(indexPath: feedIndexPath) { selectFeed(indexPath: feedIndexPath) {
self.selectArticleInCurrentFeed(articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY) self.selectArticleInCurrentFeed(articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)