mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-01 11:36:56 +01:00
Refetch articles for smart feeds and folders, if selected, when a feed or folder is deleted. Fix #838.
This commit is contained in:
parent
bffda93700
commit
849830f494
@ -169,6 +169,7 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(accountDidDownloadArticles(_:)), name: .AccountDidDownloadArticles, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(accountStateDidChange(_:)), name: .AccountStateDidChange, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(accountsDidChange(_:)), name: .AccountsDidChange, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(containerChildrenDidChange(_:)), name: .ChildrenDidChange, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(userDefaultsDidChange(_:)), name: UserDefaults.didChangeNotification, object: nil)
|
||||
DistributedNotificationCenter.default.addObserver(self, selector: #selector(appleInterfaceThemeChanged), name: .AppleInterfaceThemeChangedNotification, object: nil)
|
||||
|
||||
@ -541,6 +542,12 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr
|
||||
}
|
||||
}
|
||||
|
||||
@objc func containerChildrenDidChange(_ note: Notification) {
|
||||
if representedObjectsContainsAnyPseudoFeed() || representedObjectsContainAnyFolder() {
|
||||
fetchAndReplaceArticlesAsync()
|
||||
}
|
||||
}
|
||||
|
||||
@objc func userDefaultsDidChange(_ note: Notification) {
|
||||
|
||||
self.fontSize = AppDefaults.timelineFontSize
|
||||
@ -983,23 +990,12 @@ private extension TimelineViewController {
|
||||
}
|
||||
|
||||
func replaceArticles(with unsortedArticles: Set<Article>) {
|
||||
// Since there may be transients in a smart feed,
|
||||
// make sure each article is in a feed that’s still
|
||||
// subscribed-to.
|
||||
let filteredArticles = unsortedArticles.filter(articleIsInSubscribedToFeed)
|
||||
let sortedArticles = Array(filteredArticles).sortedByDate(sortDirection)
|
||||
let sortedArticles = Array(unsortedArticles).sortedByDate(sortDirection)
|
||||
if articles != sortedArticles {
|
||||
articles = sortedArticles
|
||||
}
|
||||
}
|
||||
|
||||
func articleIsInSubscribedToFeed(_ article: Article) -> Bool {
|
||||
guard let account = article.account, let feed = article.feed else {
|
||||
return false
|
||||
}
|
||||
return account.has(feed)
|
||||
}
|
||||
|
||||
func fetchUnsortedArticlesSync(for representedObjects: [Any]) -> Set<Article> {
|
||||
cancelPendingAsyncFetches()
|
||||
let articleFetchers = representedObjects.compactMap{ $0 as? ArticleFetcher }
|
||||
@ -1073,7 +1069,11 @@ private extension TimelineViewController {
|
||||
func representedObjectsContainsTodayFeed() -> Bool {
|
||||
return representedObjects?.contains(where: { $0 === SmartFeedsController.shared.todayFeed }) ?? false
|
||||
}
|
||||
|
||||
|
||||
func representedObjectsContainAnyFolder() -> Bool {
|
||||
return representedObjects?.contains(where: { $0 is Folder }) ?? false
|
||||
}
|
||||
|
||||
func representedObjectsContainsAnyFeed(_ feeds: Set<Feed>) -> Bool {
|
||||
|
||||
// Return true if there’s a match or if a folder contains (recursively) one of feeds
|
||||
|
Loading…
x
Reference in New Issue
Block a user