OSDN Git Service

shared instanceを持つようにした
[kcd/KCD.git] / KCD / FleetManager.swift
index 12c0c9b..b35b554 100644 (file)
@@ -8,11 +8,6 @@
 
 import Cocoa
 
-extension Notification.Name {
-    
-    static let DidPrepareFleet = Notification.Name("com.masakih.KCD.Notification.DidPrepareFleet")
-}
-
 final class FleetManager: NSObject {
     
     override init() {
@@ -22,7 +17,7 @@ final class FleetManager: NSObject {
         setupFleets()
     }
     
-    private(set) var fleets: [Fleet] = []
+    @objc private(set) var fleets: [Fleet] = []
     private var fleetController: NSArrayController!
     
     override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey: Any]?, context: UnsafeMutableRawPointer?) {
@@ -30,8 +25,8 @@ final class FleetManager: NSObject {
         if keyPath == "arrangedObjects.ships" {
             
             setNewFleetNumberToShip()
-            return
             
+            return
         }
         
         super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
@@ -45,41 +40,45 @@ final class FleetManager: NSObject {
     
     private func setupFleets() {
         
-        fleets = (1...4).flatMap { Fleet(number: $0) }
+        fleets = (1...4).compactMap { Fleet(number: $0) }
         
-        guard fleets.count == 4 else { return print("Can not create Fleet") }
+        guard fleets.count == 4 else {
+            
+            Logger.shared.log("Can not create Fleet")
+            
+            return
+        }
         
         if fleets[0].ships.isEmpty {
             
-            let center = NotificationCenter.default
-            var token: NSObjectProtocol!
-            token = center.addObserver(forName: .PortAPIReceived, object: nil, queue: nil) {_ in
-                
-                center.removeObserver(token)
-                self.setupFleetController()
-                center.post(name: .DidPrepareFleet, object: self)
+            NotificationCenter.default
+                .addObserverOnce(forName: .PortAPIReceived, object: nil, queue: nil) { _ in
+                    
+                    DispatchQueue.main.async(execute: self.setupFleetController)
+                    DispatchQueue.main.async(execute: self.setNewFleetNumberToShip)
             }
             
         } else {
             
             setupFleetController()
-            
         }
     }
     
     private func setNewFleetNumberToShip() {
         
         let store = ServerDataStore.oneTimeEditor()
-        
-        // clear all
-        store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber }
-        
-        // set
-        fleets.enumerated().forEach { (index, fleet) in
+        store.sync {
+            
+            // clear all
+            store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber }
             
-            fleet.ships.forEach {
+            // set
+            self.fleets.enumerated().forEach { index, fleet in
                 
-                store.ship(by: $0.id)?.fleet = (index + 1) as NSNumber
+                fleet.ships.forEach { ship in
+                    
+                    store.ship(by: ship.id)?.fleet = (index + 1) as NSNumber
+                }
             }
         }
     }