}
dynamic var time: NSNumber?
dynamic var state: NSNumber? {
- didSet {
- guard let state = state as? Int,
- let s = DockState(rawValue: state)
- else { return print("unknown State") }
- switch s {
- case .empty, .notOpen:
- isTasking = false
- didNotify = false
- case .hasShip, .completed:
- isTasking = true
- }
- }
+ didSet { updateState() }
}
+ dynamic var completeTime: NSNumber?
init?(number: Int) {
guard 1...4 ~= number else { return nil }
self.number = number
controller = NSArrayController()
super.init()
- controller.managedObjectContext = ServerDataStore.default.managedObjectContext
+ controller.managedObjectContext = ServerDataStore.default.context
controller.entityName = KenzoDock.entityName
controller.fetchPredicate = NSPredicate(format: "id = %ld", number)
controller.automaticallyRearrangesObjects = true
controller.fetch(nil)
- bind("state", to: controller, withKeyPath: "selection.state")
+ bind(#keyPath(state), to: controller, withKeyPath: "selection.state")
+ bind(#keyPath(completeTime), to: controller, withKeyPath: "selection.complete_time")
+ }
+
+ private func updateState() {
+ guard let state = state as? Int,
+ let s = DockState(rawValue: state)
+ else { return print("unknown State") }
+ switch s {
+ case .empty, .notOpen:
+ isTasking = false
+ didNotify = false
+ case .hasShip, .completed:
+ isTasking = true
+ }
}
func update() {
time = nil
return
}
- guard let t = controller.value(forKeyPath: "selection.complete_time") as? Int
+ guard let completeTime = completeTime as? Int
else {
time = nil
return
}
- let compTime = TimeInterval(Int(t / 1_000))
- let now = Date()
- let diff = compTime - now.timeIntervalSince1970
+ let compTime = TimeInterval(Int(completeTime / 1_000))
+ let diff = compTime - Date().timeIntervalSince1970
- if diff < 0 { realTime = 0 }
- else { realTime = diff }
+ realTime = diff < 0 ? 0 : diff
if didNotify { return }
if diff > 0 { return }