OSDN Git Service

Timerをクロージャ方式にした
[kcd/KCD.git] / KCD / RemodelSlotItemCommand.swift
index 10c7b0a..00f8eb6 100644 (file)
@@ -8,36 +8,55 @@
 
 import Cocoa
 
-class RemodelSlotItemCommand: JSONCommand {
+final class RemodelSlotItemCommand: JSONCommand {
+    
     override func execute() {
-        guard let success = data["api_remodel_flag"].int,
-            success != 0
-            else { return }
         
-        guard let slotItemId = arguments["api_slot_id"].flatMap({ Int($0) })
-            else { return print("api_slot_id is wrong") }
+        guard let success = data["api_remodel_flag"].int, success != 0 else {
+            
+            return
+        }
+        guard let slotItemId = parameter["api_slot_id"].int else {
+            
+            Logger.shared.log("api_slot_id is wrong")
+            
+            return
+        }
         
         let afterSlot = data["api_after_slot"]
         let store = ServerDataStore.oneTimeEditor()
-        guard let slotItem = store.slotItem(byId: slotItemId)
-            else { return print("SlotItem not found") }
-
-        if let locked = afterSlot["api_locked"].bool {
-            slotItem.locked = locked
+        store.sync {
+            guard let slotItem = store.slotItem(by: slotItemId) else {
+                
+                Logger.shared.log("SlotItem not found")
+                
+                return
+            }
+            
+            if let locked = afterSlot["api_locked"].int {
+                
+                slotItem.locked = (locked != 0)
+            }
+            if let masterSlotItemId = afterSlot["api_slotitem_id"].int,
+                masterSlotItemId != slotItem.slotitem_id,
+                let masterSlotItem = store.masterSlotItem(by: slotItemId) {
+                
+                slotItem.master_slotItem = masterSlotItem
+                slotItem.slotitem_id = slotItemId
+                
+            }
+            if let level = afterSlot["api_level"].int {
+                
+                slotItem.level = level
+            }
+            
+            // remove used slot items.
+            guard let useSlot = self.data["api_use_slot_id"].arrayObject as? [Int] else {
+                
+                return
+            }
+            
+            store.slotItems(in: useSlot).forEach(store.delete)
         }
-        if let masterSlotItemId = afterSlot["api_slotitem_id"].int,
-            masterSlotItemId != slotItem.slotitem_id,
-            let masterSlotItem = store.masterSlotItem(by: slotItemId) {
-            slotItem.master_slotItem = masterSlotItem
-            slotItem.slotitem_id = slotItemId
-        }
-        if let level = afterSlot["api_level"].int {
-            slotItem.level = level
-        }
-        
-        // remove used slot items.
-        guard let useSlot = data["api_use_slot_id"].arrayObject as? [Int]
-            else { return }
-        store.slotItems(in: useSlot).forEach { store.delete($0) }
     }
 }