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) {
|
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)
|
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())
|
assert(articles.eachHasAStatus())
|
||||||
}
|
}
|
||||||
|
|
||||||
// func markArticles(_ articles: Set<Article>, statusKey: String, flag: Bool) {
|
// MARK: Marking
|
||||||
//
|
|
||||||
// // Main thread.
|
func markArticleIDs(_ articleIDs: Set<String>, _ statusKey: String, _ flag: Bool, _ database: FMDatabase) {
|
||||||
//
|
|
||||||
// assertNoMissingStatuses(articles)
|
updateRowsWithValue(NSNumber(value: flag), valueKey: statusKey, whereKey: DatabaseKey.articleID, matches: Array(articleIDs), database: database)
|
||||||
// let statuses = Set(articles.flatMap { $0.status })
|
}
|
||||||
// markArticleStatuses(statuses, statusKey: statusKey, flag: flag)
|
|
||||||
// }
|
// MARK: Updating
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// func attachStatuses(_ articles: Set<Article>, _ database: FMDatabase) {
|
// 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
|
// MARK: Fetching
|
||||||
|
|
||||||
// func fetchAndCacheStatusesForArticles(_ articles: Set<Article>, _ database: FMDatabase) {
|
// func fetchAndCacheStatusesForArticles(_ articles: Set<Article>, _ database: FMDatabase) {
|
||||||
@ -203,34 +195,6 @@ private extension StatusesTable {
|
|||||||
// let status = ArticleStatus(articleID: articleID, row: row)
|
// let status = ArticleStatus(articleID: articleID, row: row)
|
||||||
// cache[articleID] = status
|
// cache[articleID] = status
|
||||||
// return 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
|
// MARK: Creating
|
||||||
|
@ -64,13 +64,10 @@ public extension DatabaseTable {
|
|||||||
|
|
||||||
// MARK: Updating
|
// MARK: Updating
|
||||||
|
|
||||||
// public func updateRowsWithValue(_ value: Any, valueKey: String, whereKey: String, matches: [Any]) {
|
public func updateRowsWithValue(_ value: Any, valueKey: String, whereKey: String, matches: [Any], database: FMDatabase) {
|
||||||
//
|
|
||||||
// queue.update { (database: FMDatabase!) in
|
let _ = database.rs_updateRows(withValue: value, valueKey: valueKey, whereKey: whereKey, inValues: matches, tableName: self.name)
|
||||||
//
|
}
|
||||||
// let _ = database.rs_updateRows(withValue: value, valueKey: valueKey, whereKey: whereKey, inValues: matches, tableName: self.name)
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
|
|
||||||
// MARK: Saving
|
// MARK: Saving
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user