OSDN Git Service

AppDelegateからウインドウに関する部分を分離した
[kcd/KCD.git] / KCD / KenzoDockStatus.swift
index ed5de66..d4d067f 100644 (file)
@@ -25,32 +25,36 @@ class KenzoDockStatus: NSObject {
     }
     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() {
@@ -58,17 +62,15 @@ class KenzoDockStatus: NSObject {
             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 }