mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2024-12-20 06:30:31 +01:00
Implement marking statuses in memory and in database.
This commit is contained in:
parent
baabf842e1
commit
f3bfa8811d
@ -108,7 +108,29 @@ final class ArticlesTable: DatabaseTable {
|
||||
|
||||
func mark(_ articles: Set<Article>, _ statusKey: String, _ flag: Bool) {
|
||||
|
||||
// TODO
|
||||
// Sets flag in both memory and in database.
|
||||
|
||||
let articleIDs = articles.flatMap { (article) -> String? in
|
||||
|
||||
guard let status = article.status else {
|
||||
assertionFailure("Each article must have a status.")
|
||||
return nil
|
||||
}
|
||||
|
||||
if status.boolStatus(forKey: statusKey) == flag {
|
||||
return nil
|
||||
}
|
||||
status.setBoolStatus(flag, forKey: statusKey)
|
||||
return article.articleID
|
||||
}
|
||||
|
||||
if articleIDs.isEmpty {
|
||||
return
|
||||
}
|
||||
|
||||
queue.update { (database) in
|
||||
self.statusesTable.markArticleIDs(Set(articleIDs), statusKey, flag, database)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -86,4 +86,9 @@ extension Set where Element == Article {
|
||||
|
||||
return withNilProperty(\Article.status)
|
||||
}
|
||||
|
||||
func statuses() -> Set<ArticleStatus> {
|
||||
|
||||
return Set<ArticleStatus>(self.flatMap { $0.status })
|
||||
}
|
||||
}
|
||||
|
@ -76,14 +76,16 @@ final class StatusesTable: DatabaseTable {
|
||||
assert(articles.eachHasAStatus())
|
||||
}
|
||||
|
||||
// func markArticles(_ articles: Set<Article>, statusKey: String, flag: Bool) {
|
||||
//
|
||||
// // Main thread.
|
||||
//
|
||||
// assertNoMissingStatuses(articles)
|
||||
// let statuses = Set(articles.flatMap { $0.status })
|
||||
// markArticleStatuses(statuses, statusKey: statusKey, flag: flag)
|
||||
// }
|
||||
// MARK: Marking
|
||||
|
||||
func markArticleIDs(_ articleIDs: Set<String>, _ statusKey: String, _ flag: Bool, _ database: FMDatabase) {
|
||||
|
||||
updateRowsWithValue(NSNumber(value: flag), valueKey: statusKey, whereKey: DatabaseKey.articleID, matches: Array(articleIDs), database: database)
|
||||
}
|
||||
|
||||
// MARK: Updating
|
||||
|
||||
|
||||
|
||||
// func attachStatuses(_ articles: Set<Article>, _ database: FMDatabase) {
|
||||
//
|
||||
@ -155,16 +157,6 @@ private extension StatusesTable {
|
||||
}
|
||||
}
|
||||
|
||||
// func assertNoMissingStatuses(_ articles: Set<Article>) {
|
||||
//
|
||||
// for oneArticle in articles {
|
||||
// if oneArticle.status == nil {
|
||||
// assertionFailure("All articles must have a status at this point.")
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// MARK: Fetching
|
||||
|
||||
// func fetchAndCacheStatusesForArticles(_ articles: Set<Article>, _ database: FMDatabase) {
|
||||
@ -203,34 +195,6 @@ private extension StatusesTable {
|
||||
// let status = ArticleStatus(articleID: articleID, row: row)
|
||||
// cache[articleID] = status
|
||||
// return status
|
||||
// }
|
||||
|
||||
// MARK: Updating
|
||||
|
||||
// func markArticleStatuses(_ statuses: Set<ArticleStatus>, statusKey: String, flag: Bool) {
|
||||
//
|
||||
// // Ignore the statuses where status.[statusKey] == flag. Update the remainder and save in database.
|
||||
//
|
||||
// var articleIDsToUpdate = Set<String>()
|
||||
//
|
||||
// statuses.forEach { (oneStatus) in
|
||||
//
|
||||
// if oneStatus.boolStatus(forKey: statusKey) == flag {
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// oneStatus.setBoolStatus(flag, forKey: statusKey)
|
||||
// articleIDsToUpdate.insert(oneStatus.articleID)
|
||||
// }
|
||||
//
|
||||
// if !articleIDsToUpdate.isEmpty {
|
||||
// updateArticleStatusesInDatabase(articleIDsToUpdate, statusKey: statusKey, flag: flag)
|
||||
// }
|
||||
// }
|
||||
|
||||
// private func updateArticleStatusesInDatabase(_ articleIDs: Set<String>, statusKey: String, flag: Bool) {
|
||||
//
|
||||
// updateRowsWithValue(NSNumber(value: flag), valueKey: statusKey, whereKey: DatabaseKey.articleID, matches: Array(articleIDs))
|
||||
// }
|
||||
|
||||
// MARK: Creating
|
||||
|
@ -64,13 +64,10 @@ public extension DatabaseTable {
|
||||
|
||||
// MARK: Updating
|
||||
|
||||
// public func updateRowsWithValue(_ value: Any, valueKey: String, whereKey: String, matches: [Any]) {
|
||||
//
|
||||
// queue.update { (database: FMDatabase!) in
|
||||
//
|
||||
// let _ = database.rs_updateRows(withValue: value, valueKey: valueKey, whereKey: whereKey, inValues: matches, tableName: self.name)
|
||||
// }
|
||||
// }
|
||||
public func updateRowsWithValue(_ value: Any, valueKey: String, whereKey: String, matches: [Any], database: FMDatabase) {
|
||||
|
||||
let _ = database.rs_updateRows(withValue: value, valueKey: valueKey, whereKey: whereKey, inValues: matches, tableName: self.name)
|
||||
}
|
||||
|
||||
// MARK: Saving
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user