// // Article.swift // DataModel // // Created by Brent Simmons on 7/1/17. // Copyright © 2017 Ranchero Software, LLC. All rights reserved. // import Foundation public final class Article: Hashable { weak var account: Account? public let articleID: ArticleID public var title: String? public var contentHTML: String? public var contentText: String? public var url: String? public var externalURL: String? public var summary: String? public var imageURL: String? public var bannerImageURL: String? public var datePublished: Date? public var dateModified: Date? public var authors: [Author]? public var tags: Set? public var attachments: [Attachment]? public var accountInfo: [String: Any]? //If account needs to store more data public var status: ArticleStatus? public let hashValue: Int var feed: Feed? { get { return account?.existingFeed(with: articleID.feedID) } } init(account: Account, feedID: String, uniqueID: String, title: String?, contentHTML: String?, contentText: String?, url: String?, externalURL: String?, summary: String?, imageURL: String?, bannerImageURL: String?, datePublished: Date?, dateModified: Date?, authors: [Author]?, tags: Set?, attachments: [Attachment]?, accountInfo: AccountInfo?) { self.account = account self.articleID = ArticleID(feedID: feedID, uniqueID: uniqueID) self.title = title self.contentHTML = contentHTML self.contentText = contentText self.url = url self.externalURL = externalURL self.summary = summary self.imageURL = imageURL self.bannerImageURL = bannerImageURL self.datePublished = datePublished self.dateModified = dateModified self.authors = authors self.tags = tags self.attachments = attachments self.accountInfo = accountInfo self.hashValue = account.hashValue ^ self.articleID.hashValue } public class func ==(lhs: Article, rhs: Article) -> Bool { return lhs === rhs } } public extension Article { public var logicalDatePublished: Date? { get { return (datePublished ?? dateModified) ?? status?.dateArrived } } }