mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Filter async requests based on ReadFilter.
This commit is contained in:
@@ -14,7 +14,7 @@ import Account
|
||||
final class SmartFeed: PseudoFeed {
|
||||
|
||||
public var defaultReadFilter: ReadFilter {
|
||||
return .all
|
||||
return .none
|
||||
}
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
|
||||
@@ -20,7 +20,7 @@ import Articles
|
||||
final class UnreadFeed: PseudoFeed {
|
||||
|
||||
public var defaultReadFilter: ReadFilter {
|
||||
return .none
|
||||
return .unavailable
|
||||
}
|
||||
|
||||
var feedID: FeedIdentifier? {
|
||||
|
||||
@@ -19,14 +19,16 @@ typealias FetchRequestOperationResultBlock = (Set<Article>, FetchRequestOperatio
|
||||
final class FetchRequestOperation {
|
||||
|
||||
let id: Int
|
||||
let readFilter: ReadFilter
|
||||
let resultBlock: FetchRequestOperationResultBlock
|
||||
var isCanceled = false
|
||||
var isFinished = false
|
||||
private let representedObjects: [Any]
|
||||
|
||||
init(id: Int, representedObjects: [Any], resultBlock: @escaping FetchRequestOperationResultBlock) {
|
||||
init(id: Int, readFilter: ReadFilter, representedObjects: [Any], resultBlock: @escaping FetchRequestOperationResultBlock) {
|
||||
precondition(Thread.isMainThread)
|
||||
self.id = id
|
||||
self.readFilter = readFilter
|
||||
self.representedObjects = representedObjects
|
||||
self.resultBlock = resultBlock
|
||||
}
|
||||
@@ -60,25 +62,38 @@ final class FetchRequestOperation {
|
||||
let numberOfFetchers = articleFetchers.count
|
||||
var fetchersReturned = 0
|
||||
var fetchedArticles = Set<Article>()
|
||||
for articleFetcher in articleFetchers {
|
||||
articleFetcher.fetchArticlesAsync { (articles) in
|
||||
precondition(Thread.isMainThread)
|
||||
guard !self.isCanceled else {
|
||||
callCompletionIfNeeded()
|
||||
return
|
||||
}
|
||||
|
||||
assert(!self.isFinished)
|
||||
|
||||
func process(articles: Set<Article>) {
|
||||
precondition(Thread.isMainThread)
|
||||
guard !self.isCanceled else {
|
||||
callCompletionIfNeeded()
|
||||
return
|
||||
}
|
||||
|
||||
assert(!self.isFinished)
|
||||
|
||||
fetchedArticles.formUnion(articles)
|
||||
fetchersReturned += 1
|
||||
if fetchersReturned == numberOfFetchers {
|
||||
self.isFinished = true
|
||||
self.resultBlock(fetchedArticles, self)
|
||||
callCompletionIfNeeded()
|
||||
fetchedArticles.formUnion(articles)
|
||||
fetchersReturned += 1
|
||||
if fetchersReturned == numberOfFetchers {
|
||||
self.isFinished = true
|
||||
self.resultBlock(fetchedArticles, self)
|
||||
callCompletionIfNeeded()
|
||||
}
|
||||
}
|
||||
|
||||
for articleFetcher in articleFetchers {
|
||||
if readFilter == .read {
|
||||
articleFetcher.fetchUnreadArticlesAsync { (articles) in
|
||||
process(articles: articles)
|
||||
}
|
||||
} else {
|
||||
articleFetcher.fetchArticlesAsync { (articles) in
|
||||
process(articles: articles)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user