NetNewsWire/Frameworks/Account/UnreadCountProvider.swift

48 lines
1.2 KiB
Swift
Raw Normal View History

2017-05-23 22:14:30 +02:00
//
// UnreadCountProtocol.swift
2018-08-29 07:18:24 +02:00
// NetNewsWire
2017-05-23 22:14:30 +02:00
//
// Created by Brent Simmons on 4/8/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
//
import Foundation
public extension Notification.Name {
static let UnreadCountDidInitialize = Notification.Name("UnreadCountDidInitialize")
static let UnreadCountDidChange = Notification.Name(rawValue: "UnreadCountDidChange")
2017-05-23 22:14:30 +02:00
}
public protocol UnreadCountProvider {
2017-05-23 22:14:30 +02:00
var unreadCount: Int { get }
2017-05-23 22:14:30 +02:00
func postUnreadCountDidChangeNotification()
func calculateUnreadCount<T: Collection>(_ children: T) -> Int
2017-05-23 22:14:30 +02:00
}
2017-05-23 22:14:30 +02:00
public extension UnreadCountProvider {
func postUnreadCountDidInitializeNotification() {
NotificationCenter.default.post(name: .UnreadCountDidInitialize, object: self, userInfo: nil)
}
func postUnreadCountDidChangeNotification() {
NotificationCenter.default.post(name: .UnreadCountDidChange, object: self, userInfo: nil)
}
func calculateUnreadCount<T: Collection>(_ children: T) -> Int {
let updatedUnreadCount = children.reduce(0) { (result, oneChild) -> Int in
if let oneUnreadCountProvider = oneChild as? UnreadCountProvider {
return result + oneUnreadCountProvider.unreadCount
}
return result
}
return updatedUnreadCount
2017-05-23 22:14:30 +02:00
}
}