NetNewsWire/Multiplatform/Shared/Sidebar/SidebarItem.swift

60 lines
1.3 KiB
Swift
Raw Normal View History

2020-06-29 13:16:48 +02:00
//
// SidebarItem.swift
// NetNewsWire
//
// Created by Maurice Parker on 6/29/20.
// Copyright © 2020 Ranchero Software. All rights reserved.
//
import Foundation
import RSCore
import Account
public enum SidebarItemIdentifier: Hashable, Equatable {
case smartFeedController
case account(String)
case feed(FeedIdentifier)
}
struct SidebarItem: Identifiable {
var id: SidebarItemIdentifier
var represented: Any
var children: [SidebarItem]?
var unreadCount: Int
var nameForDisplay: String {
guard let displayNameProvider = represented as? DisplayNameProvider else { return "" }
return displayNameProvider.nameForDisplay
}
init(_ smartFeedsController: SmartFeedsController) {
self.id = .smartFeedController
self.represented = smartFeedsController
self.children = [SidebarItem]()
self.unreadCount = 0
}
init(_ account: Account) {
self.id = .account(account.accountID)
self.represented = account
self.children = [SidebarItem]()
self.unreadCount = account.unreadCount
}
init(_ feed: Feed, unreadCount: Int) {
self.id = .feed(feed.feedID!)
self.represented = feed
self.unreadCount = unreadCount
2020-06-29 23:58:10 +02:00
if let container = feed as? Container, container.hasAtLeastOneWebFeed() {
self.children = [SidebarItem]()
}
2020-06-29 13:16:48 +02:00
}
mutating func addChild(_ sidebarItem: SidebarItem) {
children?.append(sidebarItem)
}
}