Fix bug in unfiltering a filtered timeline
This commit is contained in:
parent
d7a4bddc72
commit
809e6542e0
|
@ -112,14 +112,14 @@ class TimelineModel: ObservableObject, UndoableCommandRunner {
|
||||||
}
|
}
|
||||||
|
|
||||||
resetReadFilter()
|
resetReadFilter()
|
||||||
fetchAndReplaceArticlesAsync(feeds: feeds)
|
fetchAndReplaceArticlesAsync()
|
||||||
}
|
}
|
||||||
|
|
||||||
func toggleReadFilter() {
|
func toggleReadFilter() {
|
||||||
guard let filter = isReadFiltered, let feedID = feeds.first?.feedID else { return }
|
guard let filter = isReadFiltered, let feedID = feeds.first?.feedID else { return }
|
||||||
readFilterEnabledTable[feedID] = !filter
|
readFilterEnabledTable[feedID] = !filter
|
||||||
isReadFiltered = !filter
|
isReadFiltered = !filter
|
||||||
rebuildTimelineItems(isReadFiltered: isReadFiltered)
|
rebuildTimelineItems()
|
||||||
}
|
}
|
||||||
|
|
||||||
func toggleReadStatusForSelectedArticles() {
|
func toggleReadStatusForSelectedArticles() {
|
||||||
|
@ -257,7 +257,7 @@ private extension TimelineModel {
|
||||||
|
|
||||||
// MARK: Article Fetching
|
// MARK: Article Fetching
|
||||||
|
|
||||||
func fetchAndReplaceArticlesAsync(feeds: [Feed]) {
|
func fetchAndReplaceArticlesAsync() {
|
||||||
var fetchers = feeds as [ArticleFetcher]
|
var fetchers = feeds as [ArticleFetcher]
|
||||||
if let fetcher = exceptionArticleFetcher {
|
if let fetcher = exceptionArticleFetcher {
|
||||||
fetchers.append(fetcher)
|
fetchers.append(fetcher)
|
||||||
|
@ -279,9 +279,13 @@ private extension TimelineModel {
|
||||||
// if it’s been superseded by a newer fetch, or the timeline was emptied, etc., it won’t get called.
|
// if it’s been superseded by a newer fetch, or the timeline was emptied, etc., it won’t get called.
|
||||||
precondition(Thread.isMainThread)
|
precondition(Thread.isMainThread)
|
||||||
cancelPendingAsyncFetches()
|
cancelPendingAsyncFetches()
|
||||||
let filtered = isReadFiltered ?? false
|
|
||||||
|
|
||||||
let fetchOperation = FetchRequestOperation(id: fetchSerialNumber, readFilter: filtered, representedObjects: representedObjects) { [weak self] (articles, operation) in
|
// Right now we are pulling all the records and filtering them in the UI. This is because the async
|
||||||
|
// change of the timeline times doesn't trigger an animation because it isn't in a withAnimation block.
|
||||||
|
// Ideally this would be done in the database tier with a query, but if you look, we always pull everything
|
||||||
|
// from SQLite and filter it programmatically at that level currently. So no big deal.
|
||||||
|
// We should change this as soon as we figure out how to trigger animations on Lists with async tasks.
|
||||||
|
let fetchOperation = FetchRequestOperation(id: fetchSerialNumber, readFilter: false, representedObjects: representedObjects) { [weak self] (articles, operation) in
|
||||||
precondition(Thread.isMainThread)
|
precondition(Thread.isMainThread)
|
||||||
guard !operation.isCanceled, let strongSelf = self, operation.id == strongSelf.fetchSerialNumber else {
|
guard !operation.isCanceled, let strongSelf = self, operation.id == strongSelf.fetchSerialNumber else {
|
||||||
return
|
return
|
||||||
|
@ -293,11 +297,11 @@ private extension TimelineModel {
|
||||||
|
|
||||||
func replaceArticles(with unsortedArticles: Set<Article>) {
|
func replaceArticles(with unsortedArticles: Set<Article>) {
|
||||||
articles = Array(unsortedArticles).sortedByDate(sortDirection ? .orderedDescending : .orderedAscending, groupByFeed: groupByFeed)
|
articles = Array(unsortedArticles).sortedByDate(sortDirection ? .orderedDescending : .orderedAscending, groupByFeed: groupByFeed)
|
||||||
rebuildTimelineItems(isReadFiltered: isReadFiltered)
|
rebuildTimelineItems()
|
||||||
// TODO: Update unread counts and other item done in didSet on AppKit
|
// TODO: Update unread counts and other item done in didSet on AppKit
|
||||||
}
|
}
|
||||||
|
|
||||||
func rebuildTimelineItems(isReadFiltered: Bool?) {
|
func rebuildTimelineItems() {
|
||||||
let filtered = isReadFiltered ?? false
|
let filtered = isReadFiltered ?? false
|
||||||
let selectedArticleIDs = selectedArticles.map { $0.articleID }
|
let selectedArticleIDs = selectedArticles.map { $0.articleID }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue