OSDN Git Service

Swift4.2にコンパート
[kcd/KCD.git] / KCD / KenzoMarkCommand.swift
1 //
2 //  KenzoMarkCommand.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/12.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 final class KenzoMarkCommand: JSONCommand {
12     
13     struct KenzoDockInfo {
14         let dockId: Int
15         let shipId: Int
16         let fuel: Int
17         let bull: Int
18         let steel: Int
19         let bauxite: Int
20         let kaihatusizai: Int
21     }
22     
23     override func execute() {
24         
25         let store = LocalDataStore.oneTimeEditor()
26         store.sync {
27             self.executeInContext(localStore: store)
28         }
29     }
30     
31     private func executeInContext(localStore: LocalDataStore) {
32         
33         guard let kdockId = parameter["api_kdock_id"].int else {
34             
35             Logger.shared.log("api_kdock_id is wrong")
36             
37             return
38         }
39         
40         let store = ServerDataStore.default
41         guard let kenzoDock = store.sync(execute: { store.kenzoDock(by: kdockId) }) else {
42             
43             Logger.shared.log("KenzoDock is not found")
44             
45             return
46         }
47         let kenzoDockInfo = store.sync {
48             KenzoDockInfo(dockId: kenzoDock.id,
49                           shipId: kenzoDock.created_ship_id,
50                           fuel: kenzoDock.item1,
51                           bull: kenzoDock.item2,
52                           steel: kenzoDock.item3,
53                           bauxite: kenzoDock.item4,
54                           kaihatusizai: kenzoDock.item5)
55         }
56         guard let flagShip = store.sync(execute: { store.masterShip(by: kenzoDock.created_ship_id) }) else {
57             
58             Logger.shared.log("MasterShip is not found")
59             
60             return
61         }
62         
63         guard let new = localStore.createKenzoHistory() else {
64             
65             Logger.shared.log("Can not create KenzoHistory")
66             
67             return
68         }
69         
70         new.name = store.sync { flagShip.name }
71         new.sTypeId = store.sync { flagShip.stype.id }
72         new.fuel = kenzoDockInfo.fuel
73         new.bull = kenzoDockInfo.bull
74         new.steel = kenzoDockInfo.steel
75         new.bauxite = kenzoDockInfo.bauxite
76         new.kaihatusizai = kenzoDockInfo.kaihatusizai
77         new.date = Date()
78         (new.flagShipLv, new.flagShipName, new.commanderLv) = markedValues(docInfo: kenzoDockInfo, in: localStore)
79     }
80     
81     private func markedValues(docInfo: KenzoDockInfo, in store: LocalDataStore) -> (Int, String, Int) {
82         
83         if let kenzoMark = store.kenzoMark(docInfo: docInfo) {
84             
85             return (kenzoMark.flagShipLv, kenzoMark.flagShipName, kenzoMark.commanderLv)
86         }
87         
88         return (-1, "", -1)
89     }
90 }