5 // Created by Hori,Masaki on 2017/02/05.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 fileprivate struct LFSeparateLine {
12 static let empty = LFSeparateLine(line: "", empty: true)
15 private let isEmpty: Bool
17 init(line: String, empty: Bool = false) {
21 func append(_ column: String) -> LFSeparateLine {
22 if isEmpty { return LFSeparateLine(line: column) }
23 let newLine = line + "\t" + column
24 return LFSeparateLine(line: newLine)
26 func append(_ dateCol: Date) -> LFSeparateLine {
27 return append("\(dateCol)")
29 func append(_ intCol: Int) -> LFSeparateLine {
30 return append("\(intCol)")
32 func append(_ boolCol: Bool) -> LFSeparateLine {
33 return append("\(boolCol)")
38 private let store = LocalDataStore.oneTimeEditor()
40 private var dateFomatter: DateFormatter = {
41 let formatter = DateFormatter()
42 formatter.dateFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss' 'Z"
47 let panel = NSOpenPanel()
48 panel.allowedFileTypes = ["kcdlocaldata"]
50 guard $0 == NSModalResponseOK else { return }
52 panel.urls.forEach { url in
53 guard let fileW = try? FileWrapper(url: url) else { return }
54 fileW.fileWrappers?.forEach {
55 guard let data = $0.value.regularFileContents else { return }
57 case "kaihatu.tsv": self.registerKaihatuHistory(data)
58 case "kenzo.tsv": self.registerKenzoHistory(data)
59 case "kenzoMark.tsv": self.registerKenzoMark(data)
60 case "dropShip.tsv": self.registerDropShipHistory(data)
69 let panel = NSSavePanel()
70 panel.allowedFileTypes = ["kcdlocaldata"]
72 guard $0 == NSModalResponseOK,
75 guard let kaihatuHistory = self.dataOfKaihatuHistory(),
76 let kenzoHistory = self.dataOfKenzoHistory(),
77 let kenzoMark = self.dataOfKenzoMark(),
78 let dropShipHistory = self.dataOfDropShipHistory()
80 let fileW = FileWrapper(directoryWithFileWrappers: [:])
81 fileW.addRegularFile(withContents: kaihatuHistory, preferredFilename: "kaihatu.tsv")
82 fileW.addRegularFile(withContents: kenzoHistory, preferredFilename: "kenzo.tsv")
83 fileW.addRegularFile(withContents: kenzoMark, preferredFilename: "kenzoMark.tsv")
84 fileW.addRegularFile(withContents: dropShipHistory, preferredFilename: "dropShip.tsv")
85 do { try fileW.write(to: url, originalContentsURL: nil) }
86 catch { print("Error to write") }
90 private func localData<T>(_ entity: Entity<T>, sortBy: String = "date") -> [T] {
91 let sortDesc = NSSortDescriptor(key: sortBy, ascending: true)
92 guard let array = try? store.objects(with: entity, sortDescriptors: [sortDesc])
94 print("Can not get \(entity.name)")
99 private func dataOfKaihatuHistory() -> Data? {
100 return localData(KaihatuHistory.entity)
108 .append($0.kaihatusizai)
110 .append($0.flagShipName)
111 .append($0.flagShipLv)
112 .append($0.commanderLv)
115 .joined(separator: "\n")
118 private func dataOfKenzoHistory() -> Data? {
119 return localData(KenzoHistory.entity)
127 .append($0.kaihatusizai)
130 .append($0.flagShipName)
131 .append($0.flagShipLv)
132 .append($0.commanderLv)
135 .joined(separator: "\n")
138 private func dataOfKenzoMark() -> Data? {
139 return localData(KenzoMark.entity, sortBy: "kDockId")
147 .append($0.kaihatusizai)
148 .append($0.created_ship_id)
150 .append($0.flagShipName)
151 .append($0.flagShipLv)
152 .append($0.commanderLv)
155 .joined(separator: "\n")
158 private func dataOfDropShipHistory() -> Data? {
159 return localData(DropShipHistory.entity)
167 .append($0.mapAreaName)
168 .append($0.mapInfoName)
173 .joined(separator: "\n")
176 private func registerKaihatuHistory(_ data: Data) {
177 let array = String(data: data, encoding: .utf8)?.components(separatedBy: "\n")
178 let store = LocalDataStore.oneTimeEditor()
180 let attr = $0.components(separatedBy: "\t")
181 guard attr.count == 10,
182 let date = dateFomatter.date(from: attr[0]),
183 let fuel = Int(attr[1]),
184 let bull = Int(attr[2]),
185 let steel = Int(attr[3]),
186 let bauxite = Int(attr[4]),
187 let kaihatu = Int(attr[5]),
188 let flagLv = Int(attr[8]),
189 let commandLv = Int(attr[9])
191 let p = NSPredicate(format: "date = %@", argumentArray: [date])
192 guard let oo = try? store.objects(with: KaihatuHistory.entity, predicate: p),
196 guard let obj = store.insertNewObject(for: KaihatuHistory.entity)
203 obj.bauxite = bauxite
204 obj.kaihatusizai = kaihatu
206 obj.flagShipName = attr[7]
207 obj.flagShipLv = flagLv
208 obj.commanderLv = commandLv
211 private func registerKenzoHistory(_ data: Data) {
212 let array = String(data: data, encoding: .utf8)?.components(separatedBy: "\n")
213 let store = LocalDataStore.oneTimeEditor()
215 let attr = $0.components(separatedBy: "\t")
216 guard attr.count == 11,
217 let date = dateFomatter.date(from: attr[0]),
218 let fuel = Int(attr[1]),
219 let bull = Int(attr[2]),
220 let steel = Int(attr[3]),
221 let bauxite = Int(attr[4]),
222 let kaihatu = Int(attr[5]),
223 let sType = Int(attr[7]),
224 let flagLv = Int(attr[9]),
225 let commandLv = Int(attr[10])
227 let p = NSPredicate(format: "date = %@", argumentArray: [date])
228 guard let oo = try? store.objects(with: KenzoHistory.entity, predicate: p),
232 guard let obj = store.insertNewObject(for: KenzoHistory.entity)
239 obj.bauxite = bauxite
240 obj.kaihatusizai = kaihatu
243 obj.flagShipName = attr[8]
244 obj.flagShipLv = flagLv
245 obj.commanderLv = commandLv
248 private func registerKenzoMark( _ data: Data) {
249 let array = String(data: data, encoding: .utf8)?.components(separatedBy: "\n")
250 let store = LocalDataStore.oneTimeEditor()
252 let attr = $0.components(separatedBy: "\t")
253 guard attr.count == 11,
254 let date = dateFomatter.date(from: attr[0]),
255 let fuel = Int(attr[1]),
256 let bull = Int(attr[2]),
257 let steel = Int(attr[3]),
258 let bauxite = Int(attr[4]),
259 let kaihatu = Int(attr[5]),
260 let shiId = Int(attr[6]),
261 let kDock = Int(attr[7]),
262 let flagLv = Int(attr[9]),
263 let commandLv = Int(attr[10])
265 let p = NSPredicate(format: "date = %@", argumentArray: [date])
266 guard let oo = try? store.objects(with: KenzoMark.entity, predicate: p),
270 guard let obj = store.insertNewObject(for: KenzoMark.entity)
277 obj.bauxite = bauxite
278 obj.kaihatusizai = kaihatu
279 obj.created_ship_id = shiId
281 obj.flagShipName = attr[8]
282 obj.flagShipLv = flagLv
283 obj.commanderLv = commandLv
286 private func registerDropShipHistory( _ data: Data) {
287 let array = String(data: data, encoding: .utf8)?.components(separatedBy: "\n")
288 let store = LocalDataStore.oneTimeEditor()
290 let attr = $0.components(separatedBy: "\t")
291 guard attr.count == 9,
292 let date = dateFomatter.date(from: attr[0]),
293 let mapInfo = Int(attr[3]),
294 let mapCell = Int(attr[4]),
295 let mark = Int(attr[7])
297 let p = NSPredicate(format: "date = %@", argumentArray: [date])
298 guard let oo = try? store.objects(with: DropShipHistory.entity, predicate: p),
302 guard let obj = store.insertNewObject(for: DropShipHistory.entity)
306 obj.shipName = attr[1]
307 obj.mapArea = attr[2]
308 obj.mapInfo = mapInfo
309 obj.mapCell = mapCell
310 obj.mapAreaName = attr[5]
311 obj.mapInfoName = attr[6]
313 obj.winRank = attr[8]