Files
macos-stats/Stats/libs/Module.swift
2019-06-14 17:58:41 +02:00

46 lines
1.1 KiB
Swift

//
// Module.swift
// Stats
//
// Created by Serhiy Mytrovtsiy on 01.06.2019.
// Copyright © 2019 Serhiy Mytrovtsiy. All rights reserved.
//
import Cocoa
protocol Module {
var name: String { get }
var active: Observable<Bool> { get }
var available: Observable<Bool> { get }
var reader: Reader { get }
var view: NSView { get }
func menu() -> NSMenuItem
func start()
func stop()
}
extension Module {
func stop() {
self.reader.stop()
self.reader.usage.unsubscribe(observer: self as AnyObject)
}
func loadViewFromNib() -> NSView {
var topLevelObjects: NSArray?
if Bundle.main.loadNibNamed(NSNib.Name(String(describing: Self.self)), owner: self, topLevelObjects: &topLevelObjects) {
return (topLevelObjects?.first(where: { $0 is NSView } ) as? NSView)!
}
return NSView()
}
}
protocol Reader {
var usage: Observable<Float>! { get }
var available: Bool { get }
var updateTimer: Timer! { get set }
func start()
func stop()
func read()
}