// // Account.swift // DataModel // // Created by Brent Simmons on 7/1/17. // Copyright © 2017 Ranchero Software, LLC. All rights reserved. // import Foundation import RSCore import Data import RSParser public enum AccountType: Int { // Raw values should not change since they’re stored on disk. case onMyMac = 1 case feedly = 16 case feedbin = 17 case feedWrangler = 18 case newsBlur = 19 // TODO: more } public final class Account: DisplayNameProvider, Hashable { public let accountID: String public let type: AccountType public var nameForDisplay = "" public let delegate: AccountDelegate public let hashValue: Int let settingsFile: String let dataFolder: String var topLevelObjects = [AnyObject]() var feedIDDictionary = [String: Feed]() var username: String? var refreshInProgress = false init?(dataFolder: String, settingsFile: String, type: AccountType, accountID: String) { self.accountID = accountID self.type = type self.settingsFile = settingsFile self.dataFolder = dataFolder self.hashValue = accountID.hashValue switch type { case .onMyMac: self.delegate = LocalAccountDelegate() default: return nil } } // MARK: - API public func refreshAll() { delegate.refreshAll(for: self) } func update(_ feed: Feed, with parsedFeed: ParsedFeed, _ completion: RSVoidCompletionBlock) { // TODO } // MARK: - Equatable public class func ==(lhs: Account, rhs: Account) -> Bool { return lhs === rhs } } extension Account: PlistProvider { public func plist() -> AnyObject? { return nil // TODO } } extension Account: OPMLRepresentable { public func OPMLString(indentLevel: Int) -> String { var s = "" for oneObject in topLevelObjects { if let oneOPMLObject = oneObject as? OPMLRepresentable { s += oneOPMLObject.OPMLString(indentLevel: indentLevel + 1) } } return s } }