Perform a minor refactoring in Folder.swift.
This commit is contained in:
parent
3a4e545e22
commit
5ae70758fb
|
@ -37,7 +37,7 @@ public final class Folder: DisplayNameProvider, UnreadCountProvider {
|
||||||
|
|
||||||
// MARK: - Init
|
// MARK: - Init
|
||||||
|
|
||||||
init(account: Account, name: String) {
|
init(account: Account, name: String?) {
|
||||||
|
|
||||||
self.account = account
|
self.account = account
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -53,11 +53,11 @@ public final class Folder: DisplayNameProvider, UnreadCountProvider {
|
||||||
|
|
||||||
convenience public init?(account: Account, dictionary: [String: Any]) {
|
convenience public init?(account: Account, dictionary: [String: Any]) {
|
||||||
|
|
||||||
let name = dictionary[Key.name] as? String ?? Folder.untitledName
|
let name = dictionary[Key.name] as? String
|
||||||
self.init(account: account, name: name)
|
self.init(account: account, name: name)
|
||||||
|
|
||||||
if let childrenArray = dictionary[Key.children] as? [[String: Any]] {
|
if let childrenArray = dictionary[Key.children] as? [[String: Any]] {
|
||||||
self.children = account.objects(with: childrenArray)
|
self.children = Folder.objects(with: childrenArray, account: account)
|
||||||
}
|
}
|
||||||
|
|
||||||
if let savedUnreadCount = dictionary[Key.unreadCount] as? Int {
|
if let savedUnreadCount = dictionary[Key.unreadCount] as? Int {
|
||||||
|
@ -97,6 +97,48 @@ public final class Folder: DisplayNameProvider, UnreadCountProvider {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MARK: - Disk
|
||||||
|
|
||||||
|
private extension Folder {
|
||||||
|
|
||||||
|
static func objects(with diskObjects: [[String: Any]], account: Account) -> [AnyObject] {
|
||||||
|
|
||||||
|
if account.supportsSubFolders {
|
||||||
|
return account.objects(with: diskObjects)
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
let flattenedFeeds = feedsOnly(with: diskObjects, account: account)
|
||||||
|
return Array(flattenedFeeds) as [AnyObject]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static func feedsOnly(with diskObjects: [[String: Any]], account: Account) -> Set<Feed> {
|
||||||
|
|
||||||
|
// This Folder doesn’t support subfolders, but they might exist on disk.
|
||||||
|
// (For instance: a user might manually edit the plist to add subfolders.)
|
||||||
|
// Create a flattened version of the feeds.
|
||||||
|
|
||||||
|
var feeds = Set<Feed>()
|
||||||
|
|
||||||
|
for diskObject in diskObjects {
|
||||||
|
|
||||||
|
if Feed.isFeedDictionary(diskObject) {
|
||||||
|
if let feed = Feed(accountID: account.accountID, dictionary: diskObject) {
|
||||||
|
feeds.insert(feed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else { // Folder
|
||||||
|
if let subFolderChildren = diskObject[Key.children] as? [[String: Any]] {
|
||||||
|
let subFolderFeeds = feedsOnly(with: subFolderChildren, account: account)
|
||||||
|
feeds.formUnion(subFolderFeeds)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return feeds
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extension Folder: OPMLRepresentable {
|
extension Folder: OPMLRepresentable {
|
||||||
|
|
||||||
public func OPMLString(indentLevel: Int) -> String {
|
public func OPMLString(indentLevel: Int) -> String {
|
||||||
|
|
Loading…
Reference in New Issue