import Cocoa
-enum MapAPI: String {
- case start = "/kcsapi/api_req_map/start"
- case next = "/kcsapi/api_req_map/next"
-}
-
-class MapStartCommand: JSONCommand {
+final class MapStartCommand: JSONCommand {
+
private let store = TemporaryDataStore.oneTimeEditor()
- override class func canExecuteAPI(_ api: String) -> Bool {
- return MapAPI(rawValue: api) != nil ? true : false
+ override class func canExecuteAPI(_ api: API) -> Bool {
+
+ return api.type == .map
}
override func execute() {
- MapAPI(rawValue: api).map {
- switch $0 {
- case .start: startBattle()
- case .next:
- nextCell()
- updateBattleCell()
- }
+
+ switch api.endpoint {
+
+ case .start: startBattle()
+
+ case .next:
+ nextCell()
+ updateBattleCell()
+
+ default:
+
+ Logger.shared.log("Missing API: \(apiResponse.api)")
+
+ return
}
+
GuardShelterCommand(apiResponse: apiResponse).execute()
}
private func startBattle() {
- store.battles().forEach { store.delete($0) }
+
+ store.sync { self.store.battles().forEach(self.store.delete) }
guard let deckId = parameter["api_deck_id"].int,
let mapArea = parameter["api_maparea_id"].int,
- let mapInfo = parameter["api_mapinfo_no"].int
- else { return print("startBattle Arguments is wrong") }
+ let mapInfo = parameter["api_mapinfo_no"].int else {
+
+ Logger.shared.log("startBattle Arguments is wrong")
+
+ return
+ }
+
+ guard let no = data["api_no"].int else {
+
+ Logger.shared.log("startBattle JSON is wrong")
+
+ return
+ }
+
+ guard let battle = store.sync(execute: { self.store.createBattle() }) else {
+
+ Logger.shared.log("Can not create Battle")
+
+ return
+ }
- guard let no = data["api_no"].int
- else { return print("startBattle JSON is wrong") }
- guard let battle = store.createBattle()
- else { return print("Can not create Battle") }
- battle.deckId = deckId
- battle.mapArea = mapArea
- battle.mapInfo = mapInfo
- battle.no = no
+ let kcd = ServerDataStore.default
+
+ store.sync {
+
+ battle.deckId = deckId
+ battle.mapArea = mapArea
+ battle.mapInfo = mapInfo
+ battle.no = no
+ battle.firstFleetShipsCount = kcd.sync { kcd.ships(byDeckId: deckId).count }
+ }
}
+
private func nextCell() {
+
guard let cellNumber = data["api_no"].int,
- let eventId = data["api_event_id"].int
- else { return print("updateBattleCell JSON is wrong") }
- guard let battle = store.battle()
- else { return print("Battle is invalid.") }
- battle.no = cellNumber
- battle.isBossCell = (eventId == 5)
+ let eventId = data["api_event_id"].int else {
+
+ Logger.shared.log("updateBattleCell JSON is wrong")
+
+ return
+ }
+
+ guard let battle = store.sync(execute: { self.store.battle() }) else {
+
+ Logger.shared.log("Battle is invalid.")
+
+ return
+ }
+
+ store.sync {
+
+ battle.no = cellNumber
+ battle.isBossCell = (eventId == 5)
+ }
}
+
private func updateBattleCell() {
- store.battle().map { $0.battleCell = nil }
+
+ store.sync {
+
+ self.store.battle().map { $0.battleCell = nil }
+ }
}
}