Rename FeedIdentifier to SidebarItemIdentifier. Rename FeedIdentifiable to SidebarItemIdentifiable.
This commit is contained in:
parent
d5794a7b4e
commit
a75e5eb52a
@ -197,7 +197,7 @@ public final class AccountManager: UnreadCountProvider {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
public func existingFeed(with feedID: FeedIdentifier) -> SidebarItem? {
|
public func existingFeed(with feedID: SidebarItemIdentifier) -> SidebarItem? {
|
||||||
switch feedID {
|
switch feedID {
|
||||||
case .folder(let accountID, let folderName):
|
case .folder(let accountID, let folderName):
|
||||||
if let account = existingAccount(with: accountID) {
|
if let account = existingAccount(with: accountID) {
|
||||||
|
@ -24,12 +24,12 @@ public final class Folder: SidebarItem, Renamable, Container, Hashable {
|
|||||||
return ContainerIdentifier.folder(accountID, nameForDisplay)
|
return ContainerIdentifier.folder(accountID, nameForDisplay)
|
||||||
}
|
}
|
||||||
|
|
||||||
public var feedID: FeedIdentifier? {
|
public var feedID: SidebarItemIdentifier? {
|
||||||
guard let accountID = account?.accountID else {
|
guard let accountID = account?.accountID else {
|
||||||
assertionFailure("Expected feed.account, but got nil.")
|
assertionFailure("Expected feed.account, but got nil.")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return FeedIdentifier.folder(accountID, nameForDisplay)
|
return SidebarItemIdentifier.folder(accountID, nameForDisplay)
|
||||||
}
|
}
|
||||||
|
|
||||||
public weak var account: Account?
|
public weak var account: Account?
|
||||||
|
@ -15,7 +15,7 @@ public enum ReadFilterType {
|
|||||||
case alwaysRead
|
case alwaysRead
|
||||||
}
|
}
|
||||||
|
|
||||||
public protocol SidebarItem: FeedIdentifiable, ArticleFetcher, DisplayNameProvider, UnreadCountProvider {
|
public protocol SidebarItem: SidebarItemIdentifiable, ArticleFetcher, DisplayNameProvider, UnreadCountProvider {
|
||||||
|
|
||||||
var account: Account? { get }
|
var account: Account? { get }
|
||||||
var defaultReadFilterType: ReadFilterType { get }
|
var defaultReadFilterType: ReadFilterType { get }
|
||||||
@ -24,7 +24,7 @@ public protocol SidebarItem: FeedIdentifiable, ArticleFetcher, DisplayNameProvid
|
|||||||
|
|
||||||
public extension SidebarItem {
|
public extension SidebarItem {
|
||||||
|
|
||||||
func readFiltered(readFilterEnabledTable: [FeedIdentifier: Bool]) -> Bool {
|
func readFiltered(readFilterEnabledTable: [SidebarItemIdentifier: Bool]) -> Bool {
|
||||||
guard defaultReadFilterType != .alwaysRead else {
|
guard defaultReadFilterType != .alwaysRead else {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,11 @@
|
|||||||
|
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
public protocol FeedIdentifiable {
|
public protocol SidebarItemIdentifiable {
|
||||||
var feedID: FeedIdentifier? { get }
|
var feedID: SidebarItemIdentifier? { get }
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum FeedIdentifier: CustomStringConvertible, Hashable, Equatable {
|
public enum SidebarItemIdentifier: CustomStringConvertible, Hashable, Equatable {
|
||||||
|
|
||||||
case smartFeed(String) // String is a unique identifier
|
case smartFeed(String) // String is a unique identifier
|
||||||
case script(String) // String is a unique identifier
|
case script(String) // String is a unique identifier
|
||||||
@ -65,16 +65,16 @@ public enum FeedIdentifier: CustomStringConvertible, Hashable, Equatable {
|
|||||||
switch type {
|
switch type {
|
||||||
case "smartFeed":
|
case "smartFeed":
|
||||||
guard let id = userInfo["id"] as? String else { return nil }
|
guard let id = userInfo["id"] as? String else { return nil }
|
||||||
self = FeedIdentifier.smartFeed(id)
|
self = SidebarItemIdentifier.smartFeed(id)
|
||||||
case "script":
|
case "script":
|
||||||
guard let id = userInfo["id"] as? String else { return nil }
|
guard let id = userInfo["id"] as? String else { return nil }
|
||||||
self = FeedIdentifier.script(id)
|
self = SidebarItemIdentifier.script(id)
|
||||||
case "feed":
|
case "feed":
|
||||||
guard let accountID = userInfo["accountID"] as? String, let webFeedID = userInfo["webFeedID"] as? String else { return nil }
|
guard let accountID = userInfo["accountID"] as? String, let webFeedID = userInfo["webFeedID"] as? String else { return nil }
|
||||||
self = FeedIdentifier.webFeed(accountID, webFeedID)
|
self = SidebarItemIdentifier.webFeed(accountID, webFeedID)
|
||||||
case "folder":
|
case "folder":
|
||||||
guard let accountID = userInfo["accountID"] as? String, let folderName = userInfo["folderName"] as? String else { return nil }
|
guard let accountID = userInfo["accountID"] as? String, let folderName = userInfo["folderName"] as? String else { return nil }
|
||||||
self = FeedIdentifier.folder(accountID, folderName)
|
self = SidebarItemIdentifier.folder(accountID, folderName)
|
||||||
default:
|
default:
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
@ -17,12 +17,12 @@ public final class WebFeed: SidebarItem, Renamable, Hashable {
|
|||||||
return .none
|
return .none
|
||||||
}
|
}
|
||||||
|
|
||||||
public var feedID: FeedIdentifier? {
|
public var feedID: SidebarItemIdentifier? {
|
||||||
guard let accountID = account?.accountID else {
|
guard let accountID = account?.accountID else {
|
||||||
assertionFailure("Expected feed.account, but got nil.")
|
assertionFailure("Expected feed.account, but got nil.")
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
return FeedIdentifier.webFeed(accountID, webFeedID)
|
return SidebarItemIdentifier.webFeed(accountID, webFeedID)
|
||||||
}
|
}
|
||||||
|
|
||||||
public weak var account: Account?
|
public weak var account: Account?
|
||||||
|
@ -111,7 +111,7 @@ protocol SidebarDelegate: AnyObject {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
let selectedFeedIdentifers = Set(selectedFeedsState.compactMap( { FeedIdentifier(userInfo: $0) }))
|
let selectedFeedIdentifers = Set(selectedFeedsState.compactMap( { SidebarItemIdentifier(userInfo: $0) }))
|
||||||
selectedFeedIdentifers.forEach { treeControllerDelegate.addFilterException($0) }
|
selectedFeedIdentifers.forEach { treeControllerDelegate.addFilterException($0) }
|
||||||
|
|
||||||
rebuildTreeAndReloadDataIfNeeded()
|
rebuildTreeAndReloadDataIfNeeded()
|
||||||
@ -119,7 +119,7 @@ protocol SidebarDelegate: AnyObject {
|
|||||||
var selectIndexes = IndexSet()
|
var selectIndexes = IndexSet()
|
||||||
|
|
||||||
func selectFeedsVisitor(node: Node) {
|
func selectFeedsVisitor(node: Node) {
|
||||||
if let feedID = (node.representedObject as? FeedIdentifiable)?.feedID {
|
if let feedID = (node.representedObject as? SidebarItemIdentifiable)?.feedID {
|
||||||
if selectedFeedIdentifers.contains(feedID) {
|
if selectedFeedIdentifers.contains(feedID) {
|
||||||
selectIndexes.insert(outlineView.row(forItem: node) )
|
selectIndexes.insert(outlineView.row(forItem: node) )
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr
|
|||||||
|
|
||||||
@IBOutlet var tableView: TimelineTableView!
|
@IBOutlet var tableView: TimelineTableView!
|
||||||
|
|
||||||
private var readFilterEnabledTable = [FeedIdentifier: Bool]()
|
private var readFilterEnabledTable = [SidebarItemIdentifier: Bool]()
|
||||||
var isReadFiltered: Bool? {
|
var isReadFiltered: Bool? {
|
||||||
guard representedObjects?.count == 1, let timelineFeed = representedObjects?.first as? SidebarItem else {
|
guard representedObjects?.count == 1, let timelineFeed = representedObjects?.first as? SidebarItem else {
|
||||||
return nil
|
return nil
|
||||||
@ -287,7 +287,7 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr
|
|||||||
}
|
}
|
||||||
|
|
||||||
for i in 0..<readArticlesFilterStateKeys.count {
|
for i in 0..<readArticlesFilterStateKeys.count {
|
||||||
if let feedIdentifier = FeedIdentifier(userInfo: readArticlesFilterStateKeys[i]) {
|
if let feedIdentifier = SidebarItemIdentifier(userInfo: readArticlesFilterStateKeys[i]) {
|
||||||
readFilterEnabledTable[feedIdentifier] = readArticlesFilterStateValues[i]
|
readFilterEnabledTable[feedIdentifier] = readArticlesFilterStateValues[i]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,13 +14,13 @@ class IconImageCache {
|
|||||||
|
|
||||||
static var shared = IconImageCache()
|
static var shared = IconImageCache()
|
||||||
|
|
||||||
private var smartFeedIconImageCache = [FeedIdentifier: IconImage]()
|
private var smartFeedIconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
private var webFeedIconImageCache = [FeedIdentifier: IconImage]()
|
private var webFeedIconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
private var faviconImageCache = [FeedIdentifier: IconImage]()
|
private var faviconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
private var smallIconImageCache = [FeedIdentifier: IconImage]()
|
private var smallIconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
private var authorIconImageCache = [Author: IconImage]()
|
private var authorIconImageCache = [Author: IconImage]()
|
||||||
|
|
||||||
func imageFor(_ feedID: FeedIdentifier) -> IconImage? {
|
func imageFor(_ feedID: SidebarItemIdentifier) -> IconImage? {
|
||||||
if let smartFeed = SmartFeedsController.shared.find(by: feedID) {
|
if let smartFeed = SmartFeedsController.shared.find(by: feedID) {
|
||||||
return imageForFeed(smartFeed)
|
return imageForFeed(smartFeed)
|
||||||
}
|
}
|
||||||
@ -59,17 +59,17 @@ class IconImageCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func emptyCache() {
|
func emptyCache() {
|
||||||
smartFeedIconImageCache = [FeedIdentifier: IconImage]()
|
smartFeedIconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
webFeedIconImageCache = [FeedIdentifier: IconImage]()
|
webFeedIconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
faviconImageCache = [FeedIdentifier: IconImage]()
|
faviconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
smallIconImageCache = [FeedIdentifier: IconImage]()
|
smallIconImageCache = [SidebarItemIdentifier: IconImage]()
|
||||||
authorIconImageCache = [Author: IconImage]()
|
authorIconImageCache = [Author: IconImage]()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private extension IconImageCache {
|
private extension IconImageCache {
|
||||||
|
|
||||||
func imageForSmartFeed(_ smartFeed: PseudoFeed, _ feedID: FeedIdentifier) -> IconImage? {
|
func imageForSmartFeed(_ smartFeed: PseudoFeed, _ feedID: SidebarItemIdentifier) -> IconImage? {
|
||||||
if let iconImage = smartFeedIconImageCache[feedID] {
|
if let iconImage = smartFeedIconImageCache[feedID] {
|
||||||
return iconImage
|
return iconImage
|
||||||
}
|
}
|
||||||
@ -80,7 +80,7 @@ private extension IconImageCache {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func imageForWebFeed(_ webFeed: WebFeed, _ feedID: FeedIdentifier) -> IconImage? {
|
func imageForWebFeed(_ webFeed: WebFeed, _ feedID: SidebarItemIdentifier) -> IconImage? {
|
||||||
if let iconImage = webFeedIconImageCache[feedID] {
|
if let iconImage = webFeedIconImageCache[feedID] {
|
||||||
return iconImage
|
return iconImage
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ private extension IconImageCache {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func imageForSmallIconProvider(_ provider: SmallIconProvider, _ feedID: FeedIdentifier) -> IconImage? {
|
func imageForSmallIconProvider(_ provider: SmallIconProvider, _ feedID: SidebarItemIdentifier) -> IconImage? {
|
||||||
if let iconImage = smallIconImageCache[feedID] {
|
if let iconImage = smallIconImageCache[feedID] {
|
||||||
return iconImage
|
return iconImage
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,8 @@ import ArticlesDatabase
|
|||||||
|
|
||||||
struct SearchFeedDelegate: SmartFeedDelegate {
|
struct SearchFeedDelegate: SmartFeedDelegate {
|
||||||
|
|
||||||
var feedID: FeedIdentifier? {
|
var feedID: SidebarItemIdentifier? {
|
||||||
return FeedIdentifier.smartFeed(String(describing: SearchFeedDelegate.self))
|
return SidebarItemIdentifier.smartFeed(String(describing: SearchFeedDelegate.self))
|
||||||
}
|
}
|
||||||
|
|
||||||
var nameForDisplay: String {
|
var nameForDisplay: String {
|
||||||
|
@ -14,8 +14,8 @@ import ArticlesDatabase
|
|||||||
|
|
||||||
struct SearchTimelineFeedDelegate: SmartFeedDelegate {
|
struct SearchTimelineFeedDelegate: SmartFeedDelegate {
|
||||||
|
|
||||||
var feedID: FeedIdentifier? {
|
var feedID: SidebarItemIdentifier? {
|
||||||
return FeedIdentifier.smartFeed(String(describing: SearchTimelineFeedDelegate.self))
|
return SidebarItemIdentifier.smartFeed(String(describing: SearchTimelineFeedDelegate.self))
|
||||||
}
|
}
|
||||||
|
|
||||||
var nameForDisplay: String {
|
var nameForDisplay: String {
|
||||||
|
@ -20,7 +20,7 @@ final class SmartFeed: PseudoFeed {
|
|||||||
return .none
|
return .none
|
||||||
}
|
}
|
||||||
|
|
||||||
var feedID: FeedIdentifier? {
|
var feedID: SidebarItemIdentifier? {
|
||||||
delegate.feedID
|
delegate.feedID
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ import Articles
|
|||||||
import ArticlesDatabase
|
import ArticlesDatabase
|
||||||
import RSCore
|
import RSCore
|
||||||
|
|
||||||
protocol SmartFeedDelegate: FeedIdentifiable, DisplayNameProvider, ArticleFetcher, SmallIconProvider {
|
protocol SmartFeedDelegate: SidebarItemIdentifiable, DisplayNameProvider, ArticleFetcher, SmallIconProvider {
|
||||||
var fetchType: FetchType { get }
|
var fetchType: FetchType { get }
|
||||||
func fetchUnreadCount(for: Account, completion: @escaping SingleUnreadCountCompletionBlock)
|
func fetchUnreadCount(for: Account, completion: @escaping SingleUnreadCountCompletionBlock)
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ final class SmartFeedsController: DisplayNameProvider, ContainerIdentifiable {
|
|||||||
self.smartFeeds = [todayFeed, unreadFeed, starredFeed]
|
self.smartFeeds = [todayFeed, unreadFeed, starredFeed]
|
||||||
}
|
}
|
||||||
|
|
||||||
func find(by identifier: FeedIdentifier) -> PseudoFeed? {
|
func find(by identifier: SidebarItemIdentifier) -> PseudoFeed? {
|
||||||
switch identifier {
|
switch identifier {
|
||||||
case .smartFeed(let stringIdentifer):
|
case .smartFeed(let stringIdentifer):
|
||||||
switch stringIdentifer {
|
switch stringIdentifer {
|
||||||
|
@ -16,8 +16,8 @@ import Account
|
|||||||
|
|
||||||
struct StarredFeedDelegate: SmartFeedDelegate {
|
struct StarredFeedDelegate: SmartFeedDelegate {
|
||||||
|
|
||||||
var feedID: FeedIdentifier? {
|
var feedID: SidebarItemIdentifier? {
|
||||||
return FeedIdentifier.smartFeed(String(describing: StarredFeedDelegate.self))
|
return SidebarItemIdentifier.smartFeed(String(describing: StarredFeedDelegate.self))
|
||||||
}
|
}
|
||||||
|
|
||||||
let nameForDisplay = NSLocalizedString("Starred", comment: "Starred pseudo-feed title")
|
let nameForDisplay = NSLocalizedString("Starred", comment: "Starred pseudo-feed title")
|
||||||
|
@ -14,8 +14,8 @@ import Account
|
|||||||
|
|
||||||
struct TodayFeedDelegate: SmartFeedDelegate {
|
struct TodayFeedDelegate: SmartFeedDelegate {
|
||||||
|
|
||||||
var feedID: FeedIdentifier? {
|
var feedID: SidebarItemIdentifier? {
|
||||||
return FeedIdentifier.smartFeed(String(describing: TodayFeedDelegate.self))
|
return SidebarItemIdentifier.smartFeed(String(describing: TodayFeedDelegate.self))
|
||||||
}
|
}
|
||||||
|
|
||||||
let nameForDisplay = NSLocalizedString("Today", comment: "Today pseudo-feed title")
|
let nameForDisplay = NSLocalizedString("Today", comment: "Today pseudo-feed title")
|
||||||
|
@ -26,8 +26,8 @@ final class UnreadFeed: PseudoFeed {
|
|||||||
return .alwaysRead
|
return .alwaysRead
|
||||||
}
|
}
|
||||||
|
|
||||||
var feedID: FeedIdentifier? {
|
var feedID: SidebarItemIdentifier? {
|
||||||
return FeedIdentifier.smartFeed(String(describing: UnreadFeed.self))
|
return SidebarItemIdentifier.smartFeed(String(describing: UnreadFeed.self))
|
||||||
}
|
}
|
||||||
|
|
||||||
let nameForDisplay = NSLocalizedString("All Unread", comment: "All Unread pseudo-feed title")
|
let nameForDisplay = NSLocalizedString("All Unread", comment: "All Unread pseudo-feed title")
|
||||||
|
@ -19,13 +19,13 @@ typealias FetchRequestOperationResultBlock = (Set<Article>, FetchRequestOperatio
|
|||||||
final class FetchRequestOperation {
|
final class FetchRequestOperation {
|
||||||
|
|
||||||
let id: Int
|
let id: Int
|
||||||
let readFilterEnabledTable: [FeedIdentifier: Bool]
|
let readFilterEnabledTable: [SidebarItemIdentifier: Bool]
|
||||||
let resultBlock: FetchRequestOperationResultBlock
|
let resultBlock: FetchRequestOperationResultBlock
|
||||||
var isCanceled = false
|
var isCanceled = false
|
||||||
var isFinished = false
|
var isFinished = false
|
||||||
private let fetchers: [ArticleFetcher]
|
private let fetchers: [ArticleFetcher]
|
||||||
|
|
||||||
init(id: Int, readFilterEnabledTable: [FeedIdentifier: Bool], fetchers: [ArticleFetcher], resultBlock: @escaping FetchRequestOperationResultBlock) {
|
init(id: Int, readFilterEnabledTable: [SidebarItemIdentifier: Bool], fetchers: [ArticleFetcher], resultBlock: @escaping FetchRequestOperationResultBlock) {
|
||||||
precondition(Thread.isMainThread)
|
precondition(Thread.isMainThread)
|
||||||
self.id = id
|
self.id = id
|
||||||
self.readFilterEnabledTable = readFilterEnabledTable
|
self.readFilterEnabledTable = readFilterEnabledTable
|
||||||
|
@ -13,15 +13,15 @@ import Account
|
|||||||
|
|
||||||
final class WebFeedTreeControllerDelegate: TreeControllerDelegate {
|
final class WebFeedTreeControllerDelegate: TreeControllerDelegate {
|
||||||
|
|
||||||
private var filterExceptions = Set<FeedIdentifier>()
|
private var filterExceptions = Set<SidebarItemIdentifier>()
|
||||||
var isReadFiltered = false
|
var isReadFiltered = false
|
||||||
|
|
||||||
func addFilterException(_ feedID: FeedIdentifier) {
|
func addFilterException(_ feedID: SidebarItemIdentifier) {
|
||||||
filterExceptions.insert(feedID)
|
filterExceptions.insert(feedID)
|
||||||
}
|
}
|
||||||
|
|
||||||
func resetFilterExceptions() {
|
func resetFilterExceptions() {
|
||||||
filterExceptions = Set<FeedIdentifier>()
|
filterExceptions = Set<SidebarItemIdentifier>()
|
||||||
}
|
}
|
||||||
|
|
||||||
func treeController(treeController: TreeController, childNodesFor node: Node) -> [Node]? {
|
func treeController(treeController: TreeController, childNodesFor node: Node) -> [Node]? {
|
||||||
|
@ -33,7 +33,7 @@ enum ShowFeedName {
|
|||||||
|
|
||||||
struct FeedNode: Hashable {
|
struct FeedNode: Hashable {
|
||||||
var node: Node
|
var node: Node
|
||||||
var feedID: FeedIdentifier
|
var feedID: SidebarItemIdentifier
|
||||||
|
|
||||||
init(_ node: Node) {
|
init(_ node: Node) {
|
||||||
self.node = node
|
self.node = node
|
||||||
@ -88,7 +88,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner {
|
|||||||
private let fetchRequestQueue = FetchRequestQueue()
|
private let fetchRequestQueue = FetchRequestQueue()
|
||||||
|
|
||||||
private var expandedTable = Set<ContainerIdentifier>()
|
private var expandedTable = Set<ContainerIdentifier>()
|
||||||
private var readFilterEnabledTable = [FeedIdentifier: Bool]()
|
private var readFilterEnabledTable = [SidebarItemIdentifier: Bool]()
|
||||||
private var shadowTable = [(sectionID: String, feedNodes: [FeedNode])]()
|
private var shadowTable = [(sectionID: String, feedNodes: [FeedNode])]()
|
||||||
|
|
||||||
private(set) var preSearchTimelineFeed: SidebarItem?
|
private(set) var preSearchTimelineFeed: SidebarItem?
|
||||||
@ -355,7 +355,7 @@ 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 = FeedIdentifier(userInfo: key) {
|
if let feedIdentifier = SidebarItemIdentifier(userInfo: key) {
|
||||||
readFilterEnabledTable[feedIdentifier] = readArticlesFilterState[key]
|
readFilterEnabledTable[feedIdentifier] = readArticlesFilterState[key]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -630,7 +630,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner {
|
|||||||
refreshTimeline(resetScroll: false)
|
refreshTimeline(resetScroll: false)
|
||||||
}
|
}
|
||||||
|
|
||||||
func nodeFor(feedID: FeedIdentifier) -> Node? {
|
func nodeFor(feedID: SidebarItemIdentifier) -> Node? {
|
||||||
return treeController.rootNode.descendantNode(where: { node in
|
return treeController.rootNode.descendantNode(where: { node in
|
||||||
if let feed = node.representedObject as? SidebarItem {
|
if let feed = node.representedObject as? SidebarItem {
|
||||||
return feed.feedID == feedID
|
return feed.feedID == feedID
|
||||||
@ -2209,7 +2209,7 @@ 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 = FeedIdentifier(userInfo: feedIdentifierUserInfo) else {
|
let feedIdentifier = SidebarItemIdentifier(userInfo: feedIdentifierUserInfo) else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2294,7 +2294,7 @@ private extension SceneCoordinator {
|
|||||||
|
|
||||||
func restoreFeedSelection(_ userInfo: [AnyHashable : Any], accountID: String, webFeedID: String, articleID: String) -> Bool {
|
func restoreFeedSelection(_ userInfo: [AnyHashable : Any], accountID: String, webFeedID: String, articleID: String) -> Bool {
|
||||||
guard let feedIdentifierUserInfo = userInfo[UserInfoKey.feedIdentifier] as? [AnyHashable : AnyHashable],
|
guard let feedIdentifierUserInfo = userInfo[UserInfoKey.feedIdentifier] as? [AnyHashable : AnyHashable],
|
||||||
let feedIdentifier = FeedIdentifier(userInfo: feedIdentifierUserInfo),
|
let feedIdentifier = 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
|
||||||
@ -2352,7 +2352,7 @@ private extension SceneCoordinator {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func selectFeedAndArticle(feedIdentifier: FeedIdentifier, articleID: String, isShowingExtractedArticle: Bool, articleWindowScrollY: Int) -> Bool {
|
func selectFeedAndArticle(feedIdentifier: SidebarItemIdentifier, articleID: String, isShowingExtractedArticle: Bool, articleWindowScrollY: Int) -> Bool {
|
||||||
guard let feedNode = nodeFor(feedID: feedIdentifier), let feedIndexPath = indexPathFor(feedNode) else { return false }
|
guard let feedNode = nodeFor(feedID: feedIdentifier), let feedIndexPath = indexPathFor(feedNode) else { return false }
|
||||||
|
|
||||||
selectFeed(indexPath: feedIndexPath) {
|
selectFeed(indexPath: feedIndexPath) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user