NetNewsWire/Evergreen/Data/ArticleUtilities.swift

68 lines
1.4 KiB
Swift
Raw Normal View History

2017-05-27 10:43:27 -07:00
//
// ArticleUtilities.swift
// Evergreen
//
// Created by Brent Simmons on 7/25/15.
// Copyright © 2015 Ranchero Software, LLC. All rights reserved.
//
import Foundation
import Data
2017-09-17 12:34:10 -07:00
import Account
2017-05-27 10:43:27 -07:00
// These handle multiple accounts.
@discardableResult
func markArticles(_ articles: Set<Article>, statusKey: ArticleStatus.Key, flag: Bool) -> Set<Article>? {
2017-05-27 10:43:27 -07:00
2017-09-17 12:54:08 -07:00
let d: [String: Set<Article>] = accountAndArticlesDictionary(articles)
var updatedArticles = Set<Article>()
for (accountID, accountArticles) in d {
2017-05-27 10:43:27 -07:00
guard let account = AccountManager.shared.existingAccount(with: accountID) else {
continue
2017-05-27 10:43:27 -07:00
}
if let accountUpdatedArticles = account.markArticles(accountArticles, statusKey: statusKey, flag: flag) {
updatedArticles.formUnion(accountUpdatedArticles)
}
2017-05-27 10:43:27 -07:00
}
return updatedArticles
2017-05-27 10:43:27 -07:00
}
2017-09-17 12:54:08 -07:00
private func accountAndArticlesDictionary(_ articles: Set<Article>) -> [String: Set<Article>] {
2017-05-27 10:43:27 -07:00
let d = Dictionary(grouping: articles, by: { $0.accountID })
return d.mapValues{ Set($0) }
2017-05-27 10:43:27 -07:00
}
2017-09-17 12:54:08 -07:00
extension Article {
2017-05-27 10:43:27 -07:00
2017-09-17 17:03:58 -07:00
var feed: Feed? {
get {
return account?.existingFeed(with: feedID)
}
}
2017-09-17 16:30:45 -07:00
var preferredLink: String? {
get {
return url ?? externalURL
}
}
var body: String? {
get {
return contentHTML ?? contentText ?? summary
}
2017-05-27 10:43:27 -07:00
}
2017-09-17 17:03:58 -07:00
var logicalDatePublished: Date {
get {
2017-09-22 18:37:25 -07:00
return datePublished ?? dateModified ?? status.dateArrived
2017-09-17 17:03:58 -07:00
}
}
2017-05-27 10:43:27 -07:00
}