From ed184714be6b715d48c52be4ffd8327cd7a46ff3 Mon Sep 17 00:00:00 2001 From: masakih Date: Mon, 13 Feb 2017 20:55:45 +0900 Subject: [PATCH] =?utf8?q?CoreDataAccessora=E3=81=AE=E3=83=A1=E3=82=BD?= =?utf8?q?=E3=83=83=E3=83=89=E3=82=92=E7=9B=B4=E6=8E=A5=E5=91=BC=E3=81=B0?= =?utf8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 文字列リテラルを一箇所に集約 --- KCD/HMAirBaseCommand.swift | 5 +- KCD/HMAirCorpsChangeNameCommand.swift | 15 +- KCD/HMAirCorpsSupplyCommand.swift | 18 +-- KCD/HMAnchorageRepairManager.swift | 12 +- KCD/HMApplySuppliesCommand.swift | 7 +- KCD/HMAreaNameTransformer.swift | 9 +- KCD/HMBroserWindowController.swift | 12 +- KCD/HMChangeHenseiCommand.swift | 40 ++--- KCD/HMCreateShipCommand.swift | 45 +----- KCD/HMDestroyItem2Command.swift | 11 +- KCD/HMDocksViewController.swift | 100 ++++-------- KCD/HMDropShipHistoryCommand.swift | 58 +++---- KCD/HMDummyShipCommand.swift | 14 +- KCD/HMFleetManager.swift | 13 +- KCD/HMFleetViewController.swift | 6 +- KCD/HMGuardShelterCommand.swift | 36 ++--- KCD/HMHistoryItemCleaner.swift | 41 +---- KCD/HMJSONTracker.swift | 2 +- KCD/HMKCShipObject.swift | 18 +-- KCD/HMKaisouLockCommand.swift | 7 +- KCD/HMKenzoMarkCommand.swift | 21 +-- KCD/HMLocalDataStore.swift | 9 ++ KCD/HMMaserShipCommand.swift | 9 +- KCD/HMMemberBasicCommand.swift | 17 +- KCD/HMMemberMaterialCommand.swift | 18 +-- KCD/HMMemberShipCommand.swift | 33 ++-- KCD/HMMemberSlotItemCommand.swift | 35 ++--- KCD/HMMissionStatus.swift | 15 +- KCD/HMNyukyoDockStatus.swift | 12 +- KCD/HMNyukyoSpeedChangeCommand.swift | 29 ++-- KCD/HMNyukyoStartCommand.swift | 28 ++-- KCD/HMQuestListCommand.swift | 30 ++-- KCD/HMRealDestroyShipCommand.swift | 12 +- KCD/HMRealPowerUpCommand.swift | 16 +- KCD/HMRemodelSlotItemCommand.swift | 62 +++----- KCD/HMResetSortieCommand.swift | 5 +- KCD/HMResourceHistoryManager.swift | 19 +-- KCD/HMResourceViewController.swift | 4 +- KCD/HMServerDataStore.swift | 3 +- KCD/HMSetActionCommand.swift | 22 ++- KCD/HMSetPlaneCommand.swift | 17 +- KCD/HMShipWindowController.swift | 16 +- KCD/HMSlotItemEquipTypeTransformer.swift | 9 +- KCD/HMSlotItemLevelView.swift | 216 +++++++++++--------------- KCD/HMSlotItemShortNameTransformer.swift | 8 +- KCD/HMSlotResetCommand.swift | 12 +- KCD/HMSlotitemNameTransformer.swift | 9 +- KCD/HMStoreCreateSlotItemHistoryCommand.swift | 39 +---- KCD/HMUpdateQuestListCommand.swift | 5 +- KCD/HMUpdateSlotItemCommand.swift | 7 +- KCD/HMUpgradableShipsWindowController.swift | 4 +- 51 files changed, 382 insertions(+), 828 deletions(-) diff --git a/KCD/HMAirBaseCommand.swift b/KCD/HMAirBaseCommand.swift index d45b7c2d..6c58b40c 100644 --- a/KCD/HMAirBaseCommand.swift +++ b/KCD/HMAirBaseCommand.swift @@ -18,10 +18,7 @@ class HMAirBaseCommand: HMJSONCommand { override func execute() { let store = HMServerDataStore.oneTimeEditor() - guard let ab = try? store.objects(withEntityName: "AirBase", predicate: nil), - let airbases = ab as? [HMKCAirBase] - else { return print("AirBase is not found") } - airbases.forEach { store.delete($0) } + store.airBases().forEach { store.delete($0) } store.saveActionCore() commitJSON(toEntityNamed: "AirBase") diff --git a/KCD/HMAirCorpsChangeNameCommand.swift b/KCD/HMAirCorpsChangeNameCommand.swift index 46ec1a14..59c30fa5 100644 --- a/KCD/HMAirCorpsChangeNameCommand.swift +++ b/KCD/HMAirCorpsChangeNameCommand.swift @@ -15,16 +15,13 @@ class HMAirCorpsChangeNameCommand: HMJSONCommand { } override func execute() { - let store = HMServerDataStore.oneTimeEditor() - guard let areaId = arguments["api_area_id"], - let rId = arguments["api_base_id"], + guard let areaIdStr = arguments["api_area_id"], + let areaId = Int(areaIdStr), + let rIdStr = arguments["api_base_id"], + let rId = Int(rIdStr), let name = arguments["api_name"] else { return } - let p = NSPredicate(format: "area_id == %@ AND rid == %@", argumentArray: [areaId, rId]) - guard let a = try? store.objects(withEntityName: "AirBase", predicate: p), - let airBases = a as? [HMKCAirBase], - airBases.count != 0 - else { return } - airBases[0].name = name + let store = HMServerDataStore.oneTimeEditor() + store.airBase(area: areaId, base: rId)?.name = name } } diff --git a/KCD/HMAirCorpsSupplyCommand.swift b/KCD/HMAirCorpsSupplyCommand.swift index 2046c2f4..3f83b49d 100644 --- a/KCD/HMAirCorpsSupplyCommand.swift +++ b/KCD/HMAirCorpsSupplyCommand.swift @@ -16,17 +16,15 @@ class HMAirCorpsSupplyCommand: HMJSONCommand { override func execute() { let store = HMServerDataStore.oneTimeEditor() - guard let areaId = arguments["api_area_id"], - let rId = arguments["api_base_id"], + guard let areaIdStr = arguments["api_area_id"], + let areaId = Int(areaIdStr), + let rIdStr = arguments["api_base_id"], + let rId = Int(rIdStr), let squadronIdsString = arguments["api_squadron_id"], let data = json[dataKey] as? [String:AnyObject], let planeInfos = data["api_plane_info"] as? [[String:AnyObject]], - planeInfos.count != 0 - else { return } - let p = NSPredicate(format: "area_id == %@ AND rid == %@", argumentArray: [areaId, rId]) - guard let a = try? store.objects(withEntityName: "AirBase", predicate: p), - let airBases = a as? [HMKCAirBase], - let airBase = airBases.first + planeInfos.count != 0, + let airBase = store.airBase(area: areaId, base: rId) else { return } let planes = airBase.planeInfo let squadronIds = squadronIdsString @@ -47,9 +45,7 @@ class HMAirCorpsSupplyCommand: HMJSONCommand { } if let v = data["api_distance"] as? Int { airBase.distance = v } - guard let m = try? store.objects(withEntityName: "Material", predicate: nil), - let materials = m as? [HMKCMaterial], - let material = materials.first + guard let material = store.material() else { return } if let v = data["api_after_bauxite"] as? Int { material.bauxite = v } if let v = data["api_after_fuel"] as? Int { material.fuel = v } diff --git a/KCD/HMAnchorageRepairManager.swift b/KCD/HMAnchorageRepairManager.swift index 4df6f0f3..cd485e98 100644 --- a/KCD/HMAnchorageRepairManager.swift +++ b/KCD/HMAnchorageRepairManager.swift @@ -52,16 +52,8 @@ class HMAnchorageRepairManager: NSObject { return ship?.master_ship.stype.id } private func shipTypeId(shipId: Int) -> Int? { - let store = HMServerDataStore.default - let p = NSPredicate(format: "id = %ld", shipId) - guard let s = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = s as? [HMKCShipObject], - let ship = ships.first - else { - print("HMAnchorageRepairManager: Can not get ship") - return nil - } - return ship.master_ship.stype.id + return HMServerDataStore.default + .ship(byId: shipId)?.master_ship.stype.id } private func needsReset(info: HenseiDidChangeUserInfo) -> Bool { // 変更のあった艦隊の旗艦は工作艦か? diff --git a/KCD/HMApplySuppliesCommand.swift b/KCD/HMApplySuppliesCommand.swift index cb940589..004b1774 100644 --- a/KCD/HMApplySuppliesCommand.swift +++ b/KCD/HMApplySuppliesCommand.swift @@ -15,11 +15,8 @@ class HMApplySuppliesCommand: HMJSONCommand { let infos = data["api_ship"] as? [[String:AnyObject]] else { return } infos.forEach { - guard let i = $0["api_id"] as? Int else { return } - let p = NSPredicate(format: "id == %ld", i) - guard let s = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = s as? [HMKCShipObject], - let ship = ships.first, + guard let i = $0["api_id"] as? Int, + let ship = store.ship(byId: i), let bull = $0["api_bull"] as? Int, let fuel = $0["api_fuel"] as? Int, let slots = $0["api_onslot"] as? [Int] diff --git a/KCD/HMAreaNameTransformer.swift b/KCD/HMAreaNameTransformer.swift index ec90e2e6..c1990305 100644 --- a/KCD/HMAreaNameTransformer.swift +++ b/KCD/HMAreaNameTransformer.swift @@ -13,13 +13,8 @@ class HMAreaNameTransformer: ValueTransformer { return String.self as! AnyClass } override func transformedValue(_ value: Any?) -> Any? { - guard let v = value as? Int else { return nil } - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %d", v) - guard let a = try? store.objects(withEntityName: "MasterMapArea", predicate: predicate), - let array = a as? [HMKCMasterMapArea], - array.count != 0 + guard let id = value as? Int else { return nil } - return array[0].name + return HMServerDataStore.default.mapArea(byId: id)?.name } } diff --git a/KCD/HMBroserWindowController.swift b/KCD/HMBroserWindowController.swift index 43665721..2d054b17 100644 --- a/KCD/HMBroserWindowController.swift +++ b/KCD/HMBroserWindowController.swift @@ -126,14 +126,7 @@ class HMBroserWindowController: NSWindowController { var flagShipID: Int = 0 var flagShipName: String? { - get { - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %d", argumentArray: [flagShipID]) - guard let o = try? store.objects(withEntityName: "Ship", predicate: predicate) else { return nil } - guard let objects = o as? [HMKCShipObject] else { return nil } - if objects.count == 0 { return nil } - return objects[0].master_ship.name - } + return HMServerDataStore.default.ship(byId: flagShipID)?.name } var changeMainTabHandler: ((Int) -> Void)? = nil @@ -205,8 +198,7 @@ class HMBroserWindowController: NSWindowController { } @IBAction func clearQuestList(_ sender: AnyObject?) { let store = HMServerDataStore.oneTimeEditor() - guard let objects = try? store.objects(withEntityName: "Quest", predicate: nil) else { return } - objects.forEach { store.delete($0) } + store.quests().forEach { store.delete($0) } } @IBAction func selectView(_ sender: AnyObject?) { guard let tag = sender?.tag else { return } diff --git a/KCD/HMChangeHenseiCommand.swift b/KCD/HMChangeHenseiCommand.swift index 488d114a..528b8606 100644 --- a/KCD/HMChangeHenseiCommand.swift +++ b/KCD/HMChangeHenseiCommand.swift @@ -74,10 +74,7 @@ class HMChangeHenseiCommand: HMJSONCommand { return } let store = HMServerDataStore.oneTimeEditor() - let sortDec = NSSortDescriptor(key: "id", ascending: true) - guard let d = try? store.objects(withEntityName: "Deck", sortDescriptors: [sortDec], predicate: nil), - let decks = d as? [HMKCDeck] - else { return print("Deck not found") } + let decks = store.decksSortedById() let shipIds = decks.flatMap { (deck) -> [Int] in return (0..<6).map { if let res = deck.value(forKey: "ship_\($0)") as? Int { @@ -134,10 +131,7 @@ class HMChangeHenseiCommand: HMJSONCommand { private func excludeShipsWithoutFlagShip(deckNumber: Int) { let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "id = %ld", deckNumber) - guard let d = try? store.objects(withEntityName: "Deck", predicate: p), - let decks = d as? [HMKCDeck], - let deck = decks.first + guard let deck = store.deck(byId: deckNumber) else { return print("Deck not found") } (1..<6).forEach { deck.setValue(-1 as NSNumber, forKey: "ship_\($0)") @@ -145,24 +139,22 @@ class HMChangeHenseiCommand: HMJSONCommand { } private func packFleet(store: HMServerDataStore) { - guard let d = try? store.objects(withEntityName: "Deck", predicate: nil), - let decks = d as? [HMKCDeck] - else { return } - decks.forEach { (deck) in - var needsPack = false - (0..<6).forEach { - let shipId = deck.value(forKey: "ship_\($0)") as? Int - if (shipId == nil || shipId! == -1) && !needsPack { - needsPack = true - return - } - if needsPack { - deck.setValue(shipId! as NSNumber, forKey: "ship_\($0 - 1)") - if $0 == 5 { - deck.setValue(-1 as NSNumber, forKey: "ship_5") + store.decksSortedById() + .forEach { (deck) in + var needsPack = false + (0..<6).forEach { + let shipId = deck.value(forKey: "ship_\($0)") as? Int + if (shipId == nil || shipId! == -1) && !needsPack { + needsPack = true + return + } + if needsPack { + deck.setValue(shipId! as NSNumber, forKey: "ship_\($0 - 1)") + if $0 == 5 { + deck.setValue(-1 as NSNumber, forKey: "ship_5") + } } } - } } } diff --git a/KCD/HMCreateShipCommand.swift b/KCD/HMCreateShipCommand.swift index dcf1e989..4c6c518e 100644 --- a/KCD/HMCreateShipCommand.swift +++ b/KCD/HMCreateShipCommand.swift @@ -14,7 +14,7 @@ class HMCreateShipCommand: HMJSONCommand { return false } override func execute() { - DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { + DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) { self.afterExecute() } } @@ -22,45 +22,16 @@ class HMCreateShipCommand: HMJSONCommand { guard let d = arguments["api_kdock_id"], let dockId = Int(d) else { return print("api_kdock_id is wrong") } - let dockPredicate = NSPredicate(format: "id = %ld", dockId) let store = HMServerDataStore.default - guard let k = try? store.objects(withEntityName: "KenzoDock", predicate: dockPredicate), - let kenzoDocks = k as? [HMKCKenzoDock], - let kenzoDock = kenzoDocks.first - else { return print("KenzoDock is not found") } - - let p = NSPredicate(format: "id = 1") - guard let dd = try? store.objects(withEntityName: "Deck", predicate: p), - let decks = dd as? [HMKCDeck], - let deck = decks.first - else { return print("Deck is not found") } - let ship0 = deck.ship_0 - - let pp = NSPredicate(format: "id = %ld", ship0) - guard let s = try? store.objects(withEntityName: "Ship", predicate: pp), - let ships = s as? [HMKCShipObject], - let flagShip = ships.first - else { return print("Ship is not found") } - - guard let b = try? store.objects(withEntityName: "Basic", predicate: nil), - let basics = b as? [HMKCBasic], - let basic = basics.first - else { return print("Basic is not found") } + guard let kenzoDock = store.kenzoDock(byDockId: dockId), + let deck = store.deck(byId: 1), + let flagShip = store.ship(byId: deck.ship_0), + let basic = store.basic() + else { return print("HMCreateShipCommand: CoreData is wrong") } let localStore = HMLocalDataStore.oneTimeEditor() - let predicate = NSPredicate(format: "kDockId = %ld", dockId) - guard let km = try? localStore.objects(withEntityName: "KenzoMark", predicate: predicate), - let kenzoMarks = km as? [HMKenzoMark] - else { return print("KenzoMark is not found") } - let newMark: HMKenzoMark - if let kenzoMark = kenzoMarks.first { - newMark = kenzoMark - } - else { - guard let new = localStore.insertNewObject(forEntityName: "KenzoMark") as? HMKenzoMark - else { return print("Can not create KenzoMark") } - newMark = new - } + guard let newMark = localStore.kenzoMark(byDockId: dockId) ?? localStore.createKenzoMark() + else { return print("Can not create KenzoMark") } newMark.fuel = kenzoDock.item1 newMark.bull = kenzoDock.item2 diff --git a/KCD/HMDestroyItem2Command.swift b/KCD/HMDestroyItem2Command.swift index 9b635e9f..392a2936 100644 --- a/KCD/HMDestroyItem2Command.swift +++ b/KCD/HMDestroyItem2Command.swift @@ -19,15 +19,10 @@ class HMDestroyItem2Command: HMJSONCommand { else { return print("api_slotitem_ids is wrong") } let itemIds = sli.components(separatedBy: ",").flatMap { Int($0) } let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "id IN %@", itemIds) - guard let s = try? store.objects(withEntityName: "SlotItem", predicate: p), - let slotItems = s as? [HMKCSlotItemObject] - else { return print("SlotItem is not found") } - slotItems.forEach { store.delete($0) } + store.slotItems(in: itemIds) + .forEach { store.delete($0) } - guard let ma = try? store.objects(withEntityName: "Material", predicate: nil), - let materials = ma as? [HMKCMaterial], - let material = materials.first + guard let material = store.material() else { return print("Material is not found") } guard let data = json[dataKey] as? [String:Any], let gm = data["api_get_material"] as? [Int] diff --git a/KCD/HMDocksViewController.swift b/KCD/HMDocksViewController.swift index f659289a..c824b7c0 100644 --- a/KCD/HMDocksViewController.swift +++ b/KCD/HMDocksViewController.swift @@ -29,7 +29,8 @@ class HMDocksViewController: HMMainTabVIewItemViewController { questListViewController.view.autoresizingMask = questListViewPlaceholder.autoresizingMask questListViewPlaceholder.superview?.replaceSubview(questListViewPlaceholder, with: questListViewController.view) - ["selection", "selection.no", "content.battleCell"].forEach { + ["selection", "selection.no", "content.battleCell"] + .forEach { battleContoller.addObserver(self, forKeyPath: $0, context: nil) } @@ -40,23 +41,24 @@ class HMDocksViewController: HMMainTabVIewItemViewController { deinit { [("deck2Time", "mission2Name"), ("deck3Time", "mission3Name"), - ("deck4Time", "mission4Name") - ].forEach { + ("deck4Time", "mission4Name")] + .forEach { unbind($0.0) unbind($0.1) } [("nDock1Time", "nDock1ShipName"), ("nDock2Time", "nDock2ShipName"), ("nDock3Time", "nDock3ShipName"), - ("nDock4Time", "nDock4ShipName") - ].forEach { + ("nDock4Time", "nDock4ShipName")] + .forEach { unbind($0.0) unbind($0.1) } ["kDock1Time", "kDock2Time", "kDock3Time", "kDock4Time",] .forEach { unbind($0) } - ["selection", "selection.no", "content.battleCell"].forEach { + ["selection", "selection.no", "content.battleCell"] + .forEach { battleContoller.removeObserver(self, forKeyPath: $0) } } @@ -90,19 +92,13 @@ class HMDocksViewController: HMMainTabVIewItemViewController { let missionStates: [HMMissionStatus] = { - return [2, 3, 4].map { - return HMMissionStatus(number: $0)! - } + return [2, 3, 4].map { return HMMissionStatus(number: $0)! } }() let ndockStatus: [HMNyukyoDockStatus] = { - return [1, 2, 3, 4].map { - return HMNyukyoDockStatus(number: $0)! - } + return [1, 2, 3, 4].map { return HMNyukyoDockStatus(number: $0)! } }() let kdockStatus: [HMKenzoDockStatus] = { - return [1, 2, 3, 4].map { - return HMKenzoDockStatus(number: $0)! - } + return [1, 2, 3, 4].map { return HMKenzoDockStatus(number: $0)! } }() @IBOutlet var battleContoller: NSObjectController! @@ -110,74 +106,44 @@ class HMDocksViewController: HMMainTabVIewItemViewController { @IBOutlet weak var cellNumberField: NSTextField! var battle: HMKCBattle? { - get { - let store = HMTemporaryDataStore.default - guard let c = try? store.objects(withEntityName: "Battle", predicate: nil) as? [HMKCBattle] else { - print("error in HMDockViewController") - return nil - } - guard let battles = c else { return nil } - return battles.count > 0 ? battles[0] : nil - } + return HMTemporaryDataStore.default.battle() } var cellNumber: Int { - get { - guard let number = battleContoller.value(forKeyPath: "content.no") as? Int else { return 0 } - return number - } + return battleContoller.value(forKeyPath: "content.no") as? Int ?? 0 } var battleCellNumber: Int { - get { - guard let number = battleContoller.value(forKeyPath: "content.battleCell") as? Int else { return 0 } - return number - } + return battleContoller.value(forKeyPath: "content.battleCell") as? Int ?? 0 } var isBossCell: Bool { - get { - guard let number = battleContoller.value(forKeyPath: "content.isBossCell") as? Bool else { return false } - return number - } + return battleContoller.value(forKeyPath: "content.isBossCell") as? Bool ?? false } var fleetName: String? { - get { - let store = HMServerDataStore.default - guard let deckId = battleContoller.value(forKeyPath: "content.deckId") as? Int else { return nil } - let predicate = NSPredicate(format: "id = %@", argumentArray: [deckId]) - guard let c = try? store.objects(withEntityName: "Deck", predicate: predicate) else { return nil } - guard let decks = c as? [HMKCDeck] else { return nil } - guard decks.count != 0 else { return nil } - return decks[0].name - } + guard let deckId = battleContoller.value(forKeyPath: "content.deckId") as? Int else { return nil } + return HMServerDataStore.default.deck(byId: deckId)?.name } var areaNumber: String? { - get { - let mapArea: String = { - guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int else { return "" } - if mapArea > 10 { return "E" } - return "\(mapArea)" - }() - guard mapArea != "" else { return nil } - guard let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int else { return "" } - return "\(mapArea)-\(mapInfo)" - } + let mapArea: String = { + guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int else { return "" } + if mapArea > 10 { return "E" } + return "\(mapArea)" + }() + guard mapArea != "" else { return nil } + guard let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int else { return "" } + return "\(mapArea)-\(mapInfo)" } var areaName: String? { - guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int else { return nil } - guard let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int else { return nil } - - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "maparea_id = %@ AND %K = %@", argumentArray: [mapArea, "no", mapInfo]) - guard let m = try? store.objects(withEntityName: "MasterMapInfo", predicate: predicate) else { return nil } - guard let mapInfos = m as? [HMKCMasterMapInfo] else { return nil } - guard mapInfos.count != 0 else { return nil } + guard let mapArea = battleContoller.value(forKeyPath: "content.mapArea") as? Int, + let mapInfo = battleContoller.value(forKeyPath: "content.mapInfo") as? Int + else { return nil } - return mapInfos[0].name + return HMServerDataStore.default.mapInfo(area: mapArea, no: mapInfo)?.name } var sortieString: String? { - guard let fleetName = self.fleetName else { return nil } - guard let areaName = self.areaName else { return nil } - guard let areaNumber = self.areaNumber else { return nil } + guard let fleetName = self.fleetName, + let areaName = self.areaName, + let areaNumber = self.areaNumber + else { return nil } if battleCellNumber == 0 { let format = NSLocalizedString("%@ in sortie into %@ (%@)", comment: "Sortie") return String(format: format, arguments: [fleetName, areaName, areaNumber]) diff --git a/KCD/HMDropShipHistoryCommand.swift b/KCD/HMDropShipHistoryCommand.swift index b3e474a5..5f7d2c6e 100644 --- a/KCD/HMDropShipHistoryCommand.swift +++ b/KCD/HMDropShipHistoryCommand.swift @@ -16,28 +16,22 @@ class HMDropShipHistoryCommand: HMJSONCommand { if !api.hasSuffix("battleresult") { return } guard let data = json[dataKey] as? [String:Any], - let getShip = data["api_get_ship"] as? [String:Any] - else { return } - guard let shipName = getShip["api_ship_name"] as? String, + let getShip = data["api_get_ship"] as? [String:Any], + let shipName = getShip["api_ship_name"] as? String, let winRank = data["api_win_rank"] as? String else { return print("JSON is wrong") } - guard let battle = self.battle else { return print("Can not get Battle") } + guard let battle = HMTemporaryDataStore.default.battle() + else { return print("Can not get Battle") } let mapAreaId = battle.mapArea let store = HMServerDataStore.default - let p = NSPredicate(format: "maparea_id = %ld AND %K = %ld", mapAreaId, "no", battle.mapInfo) - guard let m = try? store.objects(withEntityName: "MasterMapInfo", predicate: p), - let mapInfos = m as? [HMKCMasterMapInfo], - let mapInfo = mapInfos.first + guard let mapInfo = store.mapInfo(area: mapAreaId, no: battle.mapInfo) else { return print("HMKCMasterMapInfo is not found") } - let pp = NSPredicate(format: "id = %ld", mapAreaId) - guard let ma = try? store.objects(withEntityName: "MasterMapArea", predicate: pp), - let mapAreas = ma as? [HMKCMasterMapArea], - let mapArea = mapAreas.first + guard let mapArea = store.mapArea(byId: mapAreaId) else { return print("HMKCMasterMapArea is not found") } let localStore = HMLocalDataStore.oneTimeEditor() - guard let new = localStore.insertNewObject(forEntityName: "HiddenDropShipHistory") as? HMDropShipHistory + guard let new = localStore.createHiddenDropShipHistory() else { return print("Can not create HiddenDropShipHistory") } new.shipName = shipName new.mapArea = "\(mapAreaId)" @@ -49,32 +43,22 @@ class HMDropShipHistoryCommand: HMJSONCommand { new.date = Date() } - private lazy var battle: HMKCBattle? = { - let store = HMTemporaryDataStore.default - guard let b = try? store.objects(withEntityName: "Battle", predicate: nil), - let battles = b as? [HMKCBattle] - else { return nil } - return battles.first - }() - private func storeToVisible() { let store = HMLocalDataStore.oneTimeEditor() - guard let d = try? store.objects(withEntityName: "HiddenDropShipHistory", predicate: nil), - let dropShipHistories = d as? [HMDropShipHistory] - else { return print("HiddenDropShipHistory is not found") } - dropShipHistories.forEach { - guard let new = store.insertNewObject(forEntityName: "DropShipHistory") as? HMDropShipHistory - else { return print("Can not create DropShipHistory") } - new.shipName = $0.shipName - new.mapArea = $0.mapArea - new.mapAreaName = $0.mapAreaName - new.mapInfo = $0.mapInfo - new.mapInfoName = $0.mapInfoName - new.mapCell = $0.mapCell - new.winRank = $0.winRank - new.date = $0.date - - store.delete($0) + store.hiddenDropShipHistories() + .forEach { + guard let new = store.createDropShipHistory() + else { return print("Can not create DropShipHistory") } + new.shipName = $0.shipName + new.mapArea = $0.mapArea + new.mapAreaName = $0.mapAreaName + new.mapInfo = $0.mapInfo + new.mapInfoName = $0.mapInfoName + new.mapCell = $0.mapCell + new.winRank = $0.winRank + new.date = $0.date + + store.delete($0) } } } diff --git a/KCD/HMDummyShipCommand.swift b/KCD/HMDummyShipCommand.swift index f99bb86d..f8fa5676 100644 --- a/KCD/HMDummyShipCommand.swift +++ b/KCD/HMDummyShipCommand.swift @@ -28,21 +28,13 @@ class HMDummyShipCommand: HMJSONCommand { } private func enterDummy() { if !HMDummyShipCommand.needsEnterDummy { return } - let store = HMServerDataStore.oneTimeEditor() - guard let dummy = store.insertNewObject(forEntityName: "Ship") as? HMKCShipObject - else { return print("Can not create Ship for dummy") } - dummy.id = -2 + store.createShip()?.id = -2 HMDummyShipCommand.needsEnterDummy = false } private func removeDummy() { - HMDummyShipCommand.needsEnterDummy = false - let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "id = -2") - guard let d = try? store.objects(withEntityName: "Ship", predicate: p), - let dummys = d as? [HMKCShipObject] - else { return } - dummys.forEach { store.delete($0) } + store.ships(byId: -2).forEach { store.delete($0) } + HMDummyShipCommand.needsEnterDummy = false } } diff --git a/KCD/HMFleetManager.swift b/KCD/HMFleetManager.swift index 9e0eaebb..13e8c273 100644 --- a/KCD/HMFleetManager.swift +++ b/KCD/HMFleetManager.swift @@ -52,21 +52,12 @@ class HMFleetManager: NSObject { let store = HMServerDataStore.oneTimeEditor() // clear all - let p = NSPredicate(format: "NOT fleet = 0") - guard let a = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = a as? [HMKCShipObject] - else { return print("HMFleetManager: Can not get Sip") } - ships.forEach { $0.fleet = 0 as NSNumber } + store.shipsInFleet().forEach { $0.fleet = 0 as NSNumber } // set fleets.enumerated().forEach { (index, fleet) in fleet.ships.forEach { - let pp = NSPredicate(format: "id = %ld", $0.id) - guard let s = try? store.objects(withEntityName: "Ship", predicate: pp), - let ss = s as? [HMKCShipObject], - let ship = ss.first - else { return } - ship.fleet = (index + 1) as NSNumber + store.ship(byId: $0.id)?.fleet = (index + 1) as NSNumber } } } diff --git a/KCD/HMFleetViewController.swift b/KCD/HMFleetViewController.swift index 265985d3..1d0d0fe6 100644 --- a/KCD/HMFleetViewController.swift +++ b/KCD/HMFleetViewController.swift @@ -104,11 +104,7 @@ class HMFleetViewController: NSViewController { dynamic var fleetNumber: Int = 1 { didSet { - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %ld", argumentArray: [fleetNumber]) - guard let d = try? store.objects(withEntityName:"Deck", predicate:predicate) else { return } - guard let decks = d as? [HMKCDeck], - let deck = decks.first + guard let deck = HMServerDataStore.default.deck(byId: fleetNumber) else { return } fleet = deck } diff --git a/KCD/HMGuardShelterCommand.swift b/KCD/HMGuardShelterCommand.swift index e3a27e36..c4012228 100644 --- a/KCD/HMGuardShelterCommand.swift +++ b/KCD/HMGuardShelterCommand.swift @@ -27,22 +27,16 @@ class HMGuardShelterCommand: HMJSONCommand { private func fleetMembers(fleetId: Int) -> [Int] { let store = HMServerDataStore.default - let p = NSPredicate(format: "id = %ld", fleetId) - guard let d = try? store.objects(withEntityName: "Deck", predicate: p), - let decks = d as? [HMKCDeck], - let deck = decks.first - else { - print("Can not get Deck") - return [] - } + guard let deck = store.deck(byId: fleetId) + else { return [] } return [deck.ship_0, deck.ship_1, deck.ship_2, deck.ship_3, deck.ship_4, deck.ship_5] } private func registerReserve() { guard let data = json[dataKey] as? [String:Any], - let escape = data["api_escape"] as? [String:Any], - let guardians = escape["api_tow_idx"] as? [Int], - let guardianPos = guardians.first + let escape = data["api_escape"] as? [String:Any], + let guardians = escape["api_tow_idx"] as? [Int], + let guardianPos = guardians.first else { return print("Can not get guardinanPos") } let secondFleet = fleetMembers(fleetId: 2) guard secondFleet.count < guardianPos - 6 @@ -66,43 +60,33 @@ class HMGuardShelterCommand: HMJSONCommand { } let store = HMTemporaryDataStore.oneTimeEditor() - guard let guardian = store.insertNewObject(forEntityName: "GuardEscaped") as? HMKCGuardEscaped + guard let guardian = store.createGuardEscaped() else { return print("Can not create GuardEscaped for guardinan") } guardian.shipID = guardianId guardian.ensured = false - guard let damaged = store.insertNewObject(forEntityName: "GuardEscaped") as? HMKCGuardEscaped + guard let damaged = store.createGuardEscaped() else { return print("Can not create GuardEscaped for damaged") } damaged.shipID = damagedId damaged.ensured = false } private func removeInvalidEntry() { let store = HMTemporaryDataStore.oneTimeEditor() - let p = NSPredicate(format: "ensured = FALSE") - guard let e = try? store.objects(withEntityName: "GuardEscaped", predicate: p), - let escapeds = e as? [HMKCGuardEscaped] - else { return } - escapeds.forEach { store.delete($0) } + store.notEnsuredGuardEscaped().forEach { store.delete($0) } store.saveActionCore() Thread.sleep(forTimeInterval: 0.1) notify() } private func removeAllEntry() { let store = HMTemporaryDataStore.oneTimeEditor() - guard let e = try? store.objects(withEntityName: "GuardEscaped", predicate: nil), - let escapeds = e as? [HMKCGuardEscaped] - else { return } - escapeds.forEach { store.delete($0) } + store.guardEscaped().forEach { store.delete($0) } store.saveActionCore() Thread.sleep(forTimeInterval: 0.1) notify() } func ensureGuardShelter() { let store = HMTemporaryDataStore.oneTimeEditor() - guard let e = try? store.objects(withEntityName: "GuardEscaped", predicate: nil), - let escapeds = e as? [HMKCGuardEscaped] - else { return } - escapeds.forEach { $0.ensured = true } + store.guardEscaped().forEach { $0.ensured = true } store.saveActionCore() Thread.sleep(forTimeInterval: 0.1) notify() diff --git a/KCD/HMHistoryItemCleaner.swift b/KCD/HMHistoryItemCleaner.swift index 967b3113..5e08c81b 100644 --- a/KCD/HMHistoryItemCleaner.swift +++ b/KCD/HMHistoryItemCleaner.swift @@ -14,40 +14,11 @@ class HMHistoryItemCleaner: NSObject { return } let store = HMLocalDataStore.oneTimeEditor() - let date = Date(timeIntervalSinceNow: TimeInterval(-1 * UserDefaults.standard.cleanSiceDays * 24 * 60 * 60)) - let predicate01 = NSPredicate(format: "date < %@", argumentArray: [date]) - let predicate02 = NSPredicate(format: "mark = 0 || mark = nil") - let predicate = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate01, predicate02]) - do { - let kaihatuHistories = try store.objects(withEntityName: "KaihatuHistory", predicate: predicate) - for obj in kaihatuHistories { - store.delete(obj) - } - } catch (let error) { - print("ERROR: KaihatuHistory, \(error)") - return - } - - do { - let kenzoHistory = try store.objects(withEntityName: "KenzoHistory", predicate: predicate) - for obj in kenzoHistory { - store.delete(obj) - } - } catch (let error) { - print("ERROR: KenzoHistory, \(error)") - return - } - - let predicate03 = NSPredicate(format: "mapArea IN %@", argumentArray: [["1", "2", "3", "4", "5", "6", "7", "8", "9"]]) - let predicate04 = NSCompoundPredicate(andPredicateWithSubpredicates: [predicate, predicate03]) - do { - let dropHistories = try store.objects(withEntityName: "DropShipHistory", predicate: predicate04) - for obj in dropHistories { - store.delete(obj) - } - } catch (let error) { - print("ERROR: DropShipHistory, \(error)") - return - } + store.unmarkedKaihatuHistories(befor: UserDefaults.standard.cleanSiceDays) + .forEach { store.delete($0) } + store.unmarkedKenzoHistories(befor: UserDefaults.standard.cleanSiceDays) + .forEach { store.delete($0) } + store.unmarkedDropShipHistories(befor: UserDefaults.standard.cleanSiceDays) + .forEach { store.delete($0) } } } diff --git a/KCD/HMJSONTracker.swift b/KCD/HMJSONTracker.swift index 4d21e148..ed20fed1 100644 --- a/KCD/HMJSONTracker.swift +++ b/KCD/HMJSONTracker.swift @@ -35,6 +35,6 @@ class HMJSONTracker: NSObject { private func start() { DispatchQueue(label: "HMJSONTracker") - .async { while true { autoreleasepool() { self.doAction() } } } + .async { while true { autoreleasepool() { self.doAction() } } } } } diff --git a/KCD/HMKCShipObject.swift b/KCD/HMKCShipObject.swift index 6c3eed8b..65ab97a5 100644 --- a/KCD/HMKCShipObject.swift +++ b/KCD/HMKCShipObject.swift @@ -229,10 +229,7 @@ extension HMKCShipObject { dynamic var guardEscaped: Bool { let store = HMTemporaryDataStore.default - let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", id) - guard let g = try? store.objects(withEntityName: "GuardEscaped", predicate: p), - let escape = g as? [HMKCGuardEscaped], - let _ = escape.first + guard let _ = store.ensuredGuardEscaped(byShipId: id) else { return false } return true } @@ -310,19 +307,8 @@ extension HMKCShipObject { } } - // TODO: HMKCSlotItemObjectから取得できるように - private func slotItem(forId id: Int) -> HMKCSlotItemObject? { - guard id != 0, id != -1 else { return nil } - let store = HMServerDataStore.default - let p = NSPredicate(format: "id = %ld", id) - guard let s = try? store.objects(withEntityName: "SlotItem", predicate: p), - let slotItems = s as? [HMKCSlotItemObject], - let slotItem = slotItems.first - else { return nil } - return slotItem - } private func slotItem(_ index: Int) -> HMKCSlotItemObject? { - return slotItem(forId: slotItemId(index)) + return HMServerDataStore.default.slotItem(byId: slotItemId(index)) } private func typeBonus(_ type: Int) -> [Double]? { switch type { diff --git a/KCD/HMKaisouLockCommand.swift b/KCD/HMKaisouLockCommand.swift index 52964cd1..b37a9c5a 100644 --- a/KCD/HMKaisouLockCommand.swift +++ b/KCD/HMKaisouLockCommand.swift @@ -21,12 +21,7 @@ class HMKaisouLockCommand: HMJSONCommand { guard let dic = json[dataKey] as? [String:Any], let locked = dic["api_locked"] as? Bool else { return print("api_locked is wrong") } - let p = NSPredicate(format: "id = %ld", slotId) let store = HMServerDataStore.oneTimeEditor() - guard let sl = try? store.objects(withEntityName: "SlotItem", predicate: p), - let slotItems = sl as? [HMKCSlotItemObject], - let slotItem = slotItems.first - else { return print("Not found SlotItem") } - slotItem.locked = locked + store.slotItem(byId: slotId)?.locked = locked } } diff --git a/KCD/HMKenzoMarkCommand.swift b/KCD/HMKenzoMarkCommand.swift index 6f6a8ca5..a2dcde9c 100644 --- a/KCD/HMKenzoMarkCommand.swift +++ b/KCD/HMKenzoMarkCommand.swift @@ -15,10 +15,7 @@ class HMKenzoMarkCommand: HMJSONCommand { else { return print("api_kdock_id is wrong") } let store = HMServerDataStore.default - let p = NSPredicate(format: "id = %ld", kdockId) - guard let k = try? store.objects(withEntityName: "KenzoDock", predicate: p), - let kenzoDocks = k as? [HMKCKenzoDock], - let kenzoDock = kenzoDocks.first + guard let kenzoDock = store.kenzoDock(byDockId: kdockId) else { return print("KenzoDock is not fount") } let fuel = kenzoDock.item1 let bull = kenzoDock.item2 @@ -27,30 +24,22 @@ class HMKenzoMarkCommand: HMJSONCommand { let kaihatu = kenzoDock.item5 let shipId = kenzoDock.created_ship_id - let pp = NSPredicate(format: "id = %ld", shipId) - guard let s = try? store.objects(withEntityName: "MasterShip", predicate: pp), - let ships = s as? [HMKCMasterShipObject], - let flagShip = ships.first + guard let flagShip = store.masterShip(byId: shipId) else { return print("MasterShip is not found") } - let localStore = HMLocalDataStore.oneTimeEditor() - let predicate = NSPredicate(format: "fuel = %ld AND bull = %ld AND steel = %ld AND bauxite = %ld AND kaihatusizai = %ld AND kDockId = %ld AND created_ship_id = %ld" - , fuel, bull, steel, bauxite, kaihatu, kdockId, shipId) - var flagShipLv: Int = -1 var flagShipName: String = "" var commanderLv: Int = -1 - if let km = try? localStore.objects(withEntityName: "KenzoMark", predicate: predicate), - let kenzoMarks = km as? [HMKenzoMark], - let kenzoMark = kenzoMarks.first + let localStore = HMLocalDataStore.oneTimeEditor() + if let kenzoMark = localStore.kenzoMark(fuel: fuel, bull: bull, steel: steel, bauxite: bauxite, kaihatusizai: kaihatu, kDockId: kdockId, shipId: shipId) { flagShipLv = kenzoMark.flagShipLv flagShipName = kenzoMark.flagShipName commanderLv = kenzoMark.commanderLv } - guard let newHistory = localStore.insertNewObject(forEntityName: "KenzoHistory") as? HMKenzoHistory + guard let newHistory = localStore.createKenzoHistory() else { return print("Can not create KenzoHistory") } newHistory.name = flagShip.name diff --git a/KCD/HMLocalDataStore.swift b/KCD/HMLocalDataStore.swift index 45358301..166e6abf 100644 --- a/KCD/HMLocalDataStore.swift +++ b/KCD/HMLocalDataStore.swift @@ -58,6 +58,12 @@ extension HMLocalDataStore { return insertNewObject(forEntityName: "DropShipHistory") as? HMDropShipHistory } + func kaihatuHistories() -> [HMKaihatuHistory] { + guard let k = try? objects(withEntityName: "KaihatuHistory"), + let kaihatuHistories = k as? [HMKaihatuHistory] + else { return [] } + return kaihatuHistories + } func unmarkedKaihatuHistories(befor days: Int) -> [HMKaihatuHistory] { let date = Date(timeIntervalSinceNow: TimeInterval(-1 * days * 24 * 60 * 60)) let predicate01 = NSPredicate(format: "date < %@", date as NSDate) @@ -103,6 +109,9 @@ extension HMLocalDataStore { else { return [] } return kenzoHistories } + func createKenzoHistory() -> HMKenzoHistory? { + return insertNewObject(forEntityName: "KenzoHistory") as? HMKenzoHistory + } func hiddenDropShipHistories() -> [HMDropShipHistory] { guard let d = try? objects(withEntityName: "HiddenDropShipHistory"), diff --git a/KCD/HMMaserShipCommand.swift b/KCD/HMMaserShipCommand.swift index 574da381..abe881ae 100644 --- a/KCD/HMMaserShipCommand.swift +++ b/KCD/HMMaserShipCommand.swift @@ -35,14 +35,7 @@ class HMMaserShipCommand: HMJSONCommand { } private lazy var masterSTypes: [HMKCMasterSType] = { - let store = HMServerDataStore.default - guard let ms = try? store.objects(withEntityName: "MasterSType", predicate: nil), - let masterSTypes = ms as? [HMKCMasterSType] - else { - print("HMMaserShipCommand: MasterSType is not found") - return [] - } - return masterSTypes + return HMServerDataStore.default.masterSTypes() }() private func setStype(_ stypeID: Int, to masterShip: HMKCMasterShipObject) { diff --git a/KCD/HMMemberBasicCommand.swift b/KCD/HMMemberBasicCommand.swift index c6e56f36..f98000d2 100644 --- a/KCD/HMMemberBasicCommand.swift +++ b/KCD/HMMemberBasicCommand.swift @@ -8,11 +8,6 @@ import Cocoa - -fileprivate enum InnerError: Error { - case canNotCreateBasic -} - class HMMemberBasicCommand: HMJSONCommand { override class func canExecuteAPI(_ api: String) -> Bool { if api == "/kcsapi/api_get_member/basic" { return true } @@ -30,18 +25,8 @@ class HMMemberBasicCommand: HMJSONCommand { else { return print("json is wrong") } let store = HMServerDataStore.oneTimeEditor() - guard let basic = try? getBasic(from: store) + guard let basic = store.basic() ?? store.createBasic() else { return print("Can not Get Basic") } registerElement(data, to: basic) } - - private func getBasic(from store: HMServerDataStore?) throws -> HMKCBasic { - if let b = try? store?.objects(withEntityName: "Basic", predicate: nil), - let basics = b as? [HMKCBasic], - let basic = basics.first - { return basic } - guard let basic = store?.insertNewObject(forEntityName: "Basic") as? HMKCBasic - else { throw InnerError.canNotCreateBasic } - return basic - } } diff --git a/KCD/HMMemberMaterialCommand.swift b/KCD/HMMemberMaterialCommand.swift index 580ef475..3d4622a2 100644 --- a/KCD/HMMemberMaterialCommand.swift +++ b/KCD/HMMemberMaterialCommand.swift @@ -8,10 +8,6 @@ import Cocoa -fileprivate enum InnerError: Error { - case canNotCreateMaterial -} - class HMMemberMaterialCommand: HMJSONCommand { override class func canExecuteAPI(_ api: String) -> Bool { if api == "/kcsapi/api_get_member/material" { return true } @@ -30,7 +26,7 @@ class HMMemberMaterialCommand: HMJSONCommand { guard let data = j.value(forKeyPath: dataKey) else { return print("JSON is wrong") } let store = HMServerDataStore.oneTimeEditor() - guard let material = try? getMaterial(from: store) + guard let material = store.material() ?? store.createMaterial() else { return print("Can not create Material") } let keys: [String] = [ @@ -57,16 +53,4 @@ class HMMemberMaterialCommand: HMJSONCommand { print("JSON is unknown type") } } - - private func getMaterial(from store: HMServerDataStore?) throws -> HMKCMaterial { - guard let m = try? store?.objects(withEntityName: "Material", predicate: nil), - let materials = m as? [HMKCMaterial] - else { throw InnerError.canNotCreateMaterial } - if let mm = materials.first { return mm } - else { - guard let mm = store?.insertNewObject(forEntityName: "Material") as? HMKCMaterial - else { throw InnerError.canNotCreateMaterial } - return mm - } - } } diff --git a/KCD/HMMemberShipCommand.swift b/KCD/HMMemberShipCommand.swift index 459c81ca..d91a2585 100644 --- a/KCD/HMMemberShipCommand.swift +++ b/KCD/HMMemberShipCommand.swift @@ -10,7 +10,7 @@ import Cocoa class HMMemberShipCommand: HMJSONCommand { - private var registerIds: [Any] = [] + private var registerIds: [Int] = [] override class func canExecuteAPI(_ api: String) -> Bool { if api == "/kcsapi/api_get_member/ship" { return true } @@ -61,7 +61,9 @@ class HMMemberShipCommand: HMJSONCommand { // 取得後破棄した装備のデータを削除するため保有IDを保存 if key == "api_id" { - registerIds.append(value) + guard let id = value as? Int + else { return false } + registerIds.append(id) return false } @@ -95,12 +97,9 @@ class HMMemberShipCommand: HMJSONCommand { } override func finishOperating(_ store: CoreDataAccessor) { if !isDeleteNotExist { return } - - let predicate = NSPredicate(format: "NOT id IN %@", registerIds) - guard let s = try? store.objects(withEntityName: "Ship", predicate: predicate), - let ships = s as? [HMKCShipObject] - else { return print("Ship is not found") } - ships.forEach { store.delete($0) } + guard let store = store as? HMServerDataStore + else { return } + store.ships(exclude: registerIds).forEach { store.delete($0) } } private var isDeleteNotExist: Bool { @@ -113,14 +112,7 @@ class HMMemberShipCommand: HMJSONCommand { } private lazy var masterShips: [HMKCMasterShipObject] = { - let store = HMServerDataStore.default - guard let ms = try? store.objects(withEntityName: "MasterShip", predicate: nil), - let masterShips = ms as? [HMKCMasterShipObject] - else { - print("MasterShip is not found") - return [] - } - return masterShips + return HMServerDataStore.default.masterShips() }() private func setMaster(_ masterId: Int, to ship: HMKCShipObject) { if ship.ship_id == masterId { return } @@ -138,14 +130,7 @@ class HMMemberShipCommand: HMJSONCommand { } private lazy var slotItems: [HMKCSlotItemObject] = { - let store = HMServerDataStore.default - guard let si = try? store.objects(withEntityName: "SlotItem", predicate: nil), - let slotItems = si as? [HMKCSlotItemObject] - else { - print("SlotItem is not found") - return [] - } - return slotItems.sorted { $0.id < $1.id } + return HMServerDataStore.default.slotItems() }() private func setSlot(_ slotItems: [Any], to ship: HMKCShipObject) { guard let converSlotItems = slotItems as? [Int] else { return } diff --git a/KCD/HMMemberSlotItemCommand.swift b/KCD/HMMemberSlotItemCommand.swift index 66b9f62e..0a30642b 100644 --- a/KCD/HMMemberSlotItemCommand.swift +++ b/KCD/HMMemberSlotItemCommand.swift @@ -10,7 +10,7 @@ import Cocoa class HMMemberSlotItemCommand: HMJSONCommand { - private var registerIds: [Any] = [] + private var registerIds: [Int] = [] override class func canExecuteAPI(_ api: String) -> Bool { if api == "/kcsapi/api_get_member/slot_item" { return true } @@ -34,10 +34,11 @@ class HMMemberSlotItemCommand: HMJSONCommand { object.setValue(nil, forKey: "alv") } override func handleExtraValue(_ value: Any, forKey key: String, to object: NSManagedObject) -> Bool { - // 取得後破棄した装備のデータを削除するため保有IDを保存 if key == "api_id" { - registerIds.append(value) + guard let id = value as? Int + else { return false } + registerIds.append(id) return false } @@ -48,33 +49,21 @@ class HMMemberSlotItemCommand: HMJSONCommand { return false } override func finishOperating(_ store: CoreDataAccessor) { - // getshipの時は取得した艦娘の装備のみのデータのため無視 if api == "/kcsapi/api_req_kousyou/getship" { return } - - let predicate = NSPredicate(format: "NOT id IN %@", registerIds) - guard let s = try? store.objects(withEntityName: "SlotItem", predicate: predicate), - let slotItems = s as? [HMKCSlotItemObject] - else { return print("SlotItem is not found") } - slotItems.forEach { store.delete($0) } + guard let store = store as? HMServerDataStore + else { return } + store.slotItems(exclude: registerIds).forEach { store.delete($0) } } private lazy var masterSlotItems: [HMKCMasterSlotItemObject] = { - let store = HMServerDataStore.default - guard let ms = try? store.objects(withEntityName: "MasterSlotItem", predicate: nil), - let masterSlotItems = ms as? [HMKCMasterSlotItemObject] - else { - print("MasterSlotItem is not found") - return [] - } - return masterSlotItems + return HMServerDataStore.default.masterSlotItems() }() private func setMaster(_ masterId: Any, to object: NSManagedObject?) { - guard let object = object else { return print("argument object is nil") } - guard let slotItem = object as? HMKCSlotItemObject - else { return print("argument object is not SlotItem") } - guard let masterId = masterId as? Int - else { return print("argument masterId is not NSNumber") } + guard let object = object, + let slotItem = object as? HMKCSlotItemObject, + let masterId = masterId as? Int + else { return print("argument is wrong") } if slotItem.slotitem_id == masterId { return } // TODO: 全部Swiftに変換し終わったら変更すること diff --git a/KCD/HMMissionStatus.swift b/KCD/HMMissionStatus.swift index aa2e0b8b..7b6e3bce 100644 --- a/KCD/HMMissionStatus.swift +++ b/KCD/HMMissionStatus.swift @@ -54,17 +54,14 @@ class HMMissionStatus: NSObject { return } - guard let missionId = self.missionId else { return } - let store = HMServerDataStore.default - let p = NSPredicate(format: "id = %@", missionId) - guard let ss = try? store.objects(withEntityName: "MasterMission", predicate: p), - let missions = ss as? [HMKCMasterMission], - let mission = missions.first + guard let missionId = self.missionId as? Int + else { return } + guard let mission = HMServerDataStore.default.masterMission(by: missionId) else { name = "Unknown" - let queue = DispatchQueue(label: "HMMissionStatus") - queue.asyncAfter(deadline: .now() + 0.33) { - self.updateState() + DispatchQueue(label: "HMMissionStatus") + .asyncAfter(deadline: .now() + 0.33) { + self.updateState() } return } diff --git a/KCD/HMNyukyoDockStatus.swift b/KCD/HMNyukyoDockStatus.swift index de02bb4a..7f3c8a78 100644 --- a/KCD/HMNyukyoDockStatus.swift +++ b/KCD/HMNyukyoDockStatus.swift @@ -53,16 +53,12 @@ class HMNyukyoDockStatus: NSObject { guard let si = controller.value(forKeyPath: "selection.ship_id") as? Int, si != 0 else { return } - let store = HMServerDataStore.default - let p = NSPredicate(format: "id = %ld", si) - guard let ss = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = ss as? [HMKCShipObject], - let ship = ships.first + guard let ship = HMServerDataStore.default.ship(byId: si) else { name = "Unknown" - let queue = DispatchQueue(label: "HMNyukyoDockStatus") - queue.asyncAfter(deadline: .now() + 0.33) { - self.updateState() + DispatchQueue(label: "HMNyukyoDockStatus") + .asyncAfter(deadline: .now() + 0.33) { + self.updateState() } return } diff --git a/KCD/HMNyukyoSpeedChangeCommand.swift b/KCD/HMNyukyoSpeedChangeCommand.swift index 14247469..4d947eac 100644 --- a/KCD/HMNyukyoSpeedChangeCommand.swift +++ b/KCD/HMNyukyoSpeedChangeCommand.swift @@ -15,29 +15,18 @@ class HMNyukyoSpeedChangeCommand: HMJSONCommand { } override func execute() { let store = HMServerDataStore.oneTimeEditor() - guard let ndockId = arguments["api_ndock_id"] else { return } - let p = NSPredicate(format: "id = %@", argumentArray: [ndockId]) - guard let d = try? store.objects(withEntityName: "NyukyoDock", predicate: p), - let ndocks = d as? [HMKCNyukyoDock], - let ndock = ndocks.first + guard let ndockIdStr = arguments["api_ndock_id"], + let ndockId = Int(ndockIdStr), + let ndock = store.nyukyoDock(by: ndockId) else { return print("HMNyukyoSpeedChangeCommand: Not found ndock") } - let shipId = ndock.ship_id ndock.ship_id = 0 ndock.state = 0 - // 艦隊リスト更新 - let pp = NSPredicate(format: "id = %ld", shipId) - guard let s = try? store.objects(withEntityName: "Ship", predicate: pp), - let ships = s as? [HMKCShipObject], - let ship = ships.first - else { return print("HMNyukyoSpeedChangeCommand: Not found Ship") } - ship.nowhp = ship.maxhp - - // - guard let m = try? store.objects(withEntityName: "Material", predicate: nil), - let materials = m as? [HMKCMaterial], - let material = materials.first - else { return print("HMNyukyoSpeedChangeCommand: Not found Material") } - material.kousokushuhuku = material.kousokushuhuku - 1 + if let ship = store.ship(byId: ndock.ship_id) { + ship.nowhp = ship.maxhp + } + if let material = store.material() { + material.kousokushuhuku = material.kousokushuhuku - 1 + } } } diff --git a/KCD/HMNyukyoStartCommand.swift b/KCD/HMNyukyoStartCommand.swift index 71a2ea14..75aa7d21 100644 --- a/KCD/HMNyukyoStartCommand.swift +++ b/KCD/HMNyukyoStartCommand.swift @@ -16,25 +16,17 @@ class HMNyukyoStartCommand: HMJSONCommand { override func execute() { guard let h = arguments["api_highspeed"], let hi = Int(h), - hi != 0 - else { return } - - let store = HMServerDataStore.oneTimeEditor() - - guard let s = arguments["api_ship_id"], + hi != 0, + let s = arguments["api_ship_id"], let sid = Int(s) - else { return print("api_ship_id is wrong") } - let p = NSPredicate(format: "id = %ld", sid) - guard let ss = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = ss as? [HMKCShipObject], - let ship = ships.first - else { return print("Not found ship") } - ship.nowhp = ship.maxhp + else { return print("HMNyukyoStartCommand: error") } - guard let m = try? store.objects(withEntityName: "Material", predicate: nil), - let materials = m as? [HMKCMaterial], - let material = materials.first - else { return print("Not found Material") } - material.kousokushuhuku = material.kousokushuhuku - 1 + let store = HMServerDataStore.oneTimeEditor() + if let ship = store.ship(byId: sid) { + ship.nowhp = ship.maxhp + } + if let material = store.material() { + material.kousokushuhuku = material.kousokushuhuku - 1 + } } } diff --git a/KCD/HMQuestListCommand.swift b/KCD/HMQuestListCommand.swift index e64a1fcf..f3bc211d 100644 --- a/KCD/HMQuestListCommand.swift +++ b/KCD/HMQuestListCommand.swift @@ -23,7 +23,6 @@ class HMQuestListCommand: HMJSONCommand { tab == 0 else { return } - // 範囲内の任務をいったん遂行中からはずす let j = json as NSDictionary guard let data = j.value(forKeyPath: dataKey) as? [String:Any], let questList = data["api_list"] as? [Any], @@ -33,33 +32,24 @@ class HMQuestListCommand: HMJSONCommand { let page = data["api_disp_page"] as? Int else { return print("data is wrong") } - let qlm = questList.last as? [String:Any] - let qlmNo = qlm?["api_no"] as? Int ?? 9999 + let store = HMServerDataStore.oneTimeEditor() + // 範囲内の任務をいったん遂行中からはずす + let qlm = questList.last as? [String:Any] + let qlmNo = qlm?["api_no"] as? Int ?? Int.max - 1 let minNo = (page == 1) ? 0 : ql0No - let maxNo = (page == pageCount) ? 9999 : qlmNo - - let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "(%K >= %ld) && (%K <= %ld)", "no", minNo, "no", maxNo) - if let q = try? store.objects(withEntityName: "Quest", predicate: p) { - if let qu = q as? [HMKCQuest] { - qu.forEach { $0.state = 1 } - } - } + let maxNo = (page == pageCount) ? Int.max - 1 : qlmNo + store.quests(in: minNo...maxNo).forEach { $0.state = 1 } // 新しいデータ投入 - let so = NSSortDescriptor(key: "no", ascending: true) - guard let qq = try? store.objects(withEntityName: "Quest", sortDescriptors: [so], predicate: nil), - let quests = qq as? [HMKCQuest] - else { return } + let quests = store.sortedQuest() questList.forEach { guard let questData = $0 as? [String:Any] else { return } let no = questData["api_no"] as? Int let t = quests.filter { no == $0.no } - let tt = t.first ?? store.insertNewObject(forEntityName: "Quest") - guard let new = tt as? HMKCQuest else { return print("Can not create Quest") } - let flag = questData["api_bonus_flag"] as? Int ?? 0 - new.bonus_flag = (flag != 0) + guard let new = t.first ?? store.createQuest() + else { return print("Can not create Quest") } + new.bonus_flag = questData["api_bonus_flag"] as? Bool ?? false new.category = questData["api_category"] as? Int ?? 0 new.detail = questData["api_detail"] as? String ?? "" // new.get_material_0 = questData["api_get_material_0"] as? Int ?? 0 diff --git a/KCD/HMRealDestroyShipCommand.swift b/KCD/HMRealDestroyShipCommand.swift index ba73d319..c6cdccb7 100644 --- a/KCD/HMRealDestroyShipCommand.swift +++ b/KCD/HMRealDestroyShipCommand.swift @@ -10,14 +10,12 @@ import Cocoa class HMRealDestroyShipCommand: HMJSONCommand { override func execute() { - guard let d = arguments["api_ship_id"] + guard let d = arguments["api_ship_id"], + let shipId = Int(d) else { return print("api_ship_id is wrong") } let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "id = %@", d) - guard let s = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = s as? [HMKCShipObject], - let ship = ships.first - else { return print("Ship not found") } - store.delete(ship) + if let ship = store.ship(byId: shipId) { + store.delete(ship) + } } } diff --git a/KCD/HMRealPowerUpCommand.swift b/KCD/HMRealPowerUpCommand.swift index 19485f1c..5806a053 100644 --- a/KCD/HMRealPowerUpCommand.swift +++ b/KCD/HMRealPowerUpCommand.swift @@ -10,17 +10,13 @@ import Cocoa class HMRealPowerUpCommand: HMJSONCommand { override func execute() { - guard let u = arguments["api_id_items"] + guard let shipIdsStr = arguments["api_id_items"] else { return print("api_id_items is wrong") } - let usedShips = u.components(separatedBy: ",") let store = HMServerDataStore.oneTimeEditor() - usedShips.forEach { - let p = NSPredicate(format: "id = %@", $0) - guard let s = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = s as? [HMKCShipObject], - let ship = ships.first - else { return print("Ship not found") } - store.delete(ship) - } + shipIdsStr + .components(separatedBy: ",") + .flatMap { Int($0) } + .flatMap { store.ship(byId: $0) } + .forEach { store.delete($0) } } } diff --git a/KCD/HMRemodelSlotItemCommand.swift b/KCD/HMRemodelSlotItemCommand.swift index 4cd624d2..41bf05d5 100644 --- a/KCD/HMRemodelSlotItemCommand.swift +++ b/KCD/HMRemodelSlotItemCommand.swift @@ -13,52 +13,36 @@ class HMRemodelSlotItemCommand: HMJSONCommand { guard let data = json[dataKey] as? [String:Any] else { return print("JSON is wrong") } - guard let success = data["api_remodel_flag"] as? Bool else { return } - if !success { - print("Remodel is faild.") - return - } + guard let success = data["api_remodel_flag"] as? Bool, + success + else { return } guard let sl = arguments["api_slot_id"], - let slotItemId = Int(sl) + let slotItemId = Int(sl), + let afterSlot = data["api_after_slot"] as? [String:Any] else { return print("api_slot_id is wrong") } - let pp = NSPredicate(format: "id = %ld", slotItemId) + let store = HMServerDataStore.oneTimeEditor() - guard let sls = try? store.objects(withEntityName: "SlotItem", predicate: pp), - let slotItems = sls as? [HMKCSlotItemObject], - let slotItem = slotItems.first + guard let slotItem = store.slotItem(byId: slotItemId) else { return print("SlotItem not found") } - guard let afterSlot = data["api_after_slot"] as? [String:Any], - let locked = afterSlot["api_locked"] as? NSNumber - else { return print("api_after_slot is wrong") } - slotItem.locked = locked as Bool - - guard let masterSlotItemId = afterSlot["api_slotitem_id"] as? Int - else { return print("api_slotitem_id is wrong") } - if masterSlotItemId != slotItem.slotitem_id { - setMasterSlotItem(masterSlotItemId, to: slotItem, store: store) + + if let locked = afterSlot["api_locked"] as? Bool { + slotItem.locked = locked + } + if let masterSlotItemId = afterSlot["api_slotitem_id"] as? 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"] as? Int { + slotItem.level = level } - - guard let level = afterSlot["api_level"] as? Int - else { return print("api_level is wrong") } - slotItem.level = level // remove used slot items. - guard let useSlot = data["api_use_slot_id"] as? [NSNumber] else { return } - let p = NSPredicate(format: "id IN %@", useSlot) - guard let s = try? store.objects(withEntityName: "SlotItem", predicate: p), - let useSlotItems = s as? [HMKCSlotItemObject] - else { return print("slotItem not found") } - useSlotItems.forEach { store.delete($0) } - } - - private func setMasterSlotItem(_ slotItemId: Int, to slotItem: HMKCSlotItemObject, store: HMServerDataStore) { - let p = NSPredicate(format: "id = %ld", slotItemId) - guard let ma = try? store.objects(withEntityName: "MasterSlotItem", predicate: p), - let masterSlotItems = ma as? [HMKCMasterSlotItemObject], - let masterSlotItem = masterSlotItems.first - else { return print("MasterSlotItem not found") } - slotItem.master_slotItem = masterSlotItem - slotItem.slotitem_id = slotItemId + guard let useSlot = data["api_use_slot_id"] as? [Int] + else { return } + store.slotItems(in: useSlot).forEach { store.delete($0) } } } diff --git a/KCD/HMResetSortieCommand.swift b/KCD/HMResetSortieCommand.swift index d2825379..be150d53 100644 --- a/KCD/HMResetSortieCommand.swift +++ b/KCD/HMResetSortieCommand.swift @@ -11,9 +11,6 @@ import Cocoa class HMResetSortieCommand: HMJSONCommand { override func execute() { let store = HMTemporaryDataStore.oneTimeEditor() - guard let b = try? store.objects(withEntityName: "Battle", predicate: nil), - let battles = b as? [HMKCBattle] - else { return } - battles.forEach { store.delete($0) } + store.battles().forEach { store.delete($0) } } } diff --git a/KCD/HMResourceHistoryManager.swift b/KCD/HMResourceHistoryManager.swift index 2b02bd3c..ba3592fb 100644 --- a/KCD/HMResourceHistoryManager.swift +++ b/KCD/HMResourceHistoryManager.swift @@ -41,17 +41,13 @@ class HMResourceHistoryManager: NSObject { } private func saveResources() { let store = HMServerDataStore.default - guard let m = try? store.objects(withEntityName: "Material", predicate: nil), - let materials = m as? [HMKCMaterial], - let material = materials.first + guard let material = store.material() else { return print("HMResourceHistoryManager: Can not get Material") } - guard let b = try? store.objects(withEntityName: "Basic", predicate: nil), - let basics = b as? [HMKCBasic], - let basic = basics.first + guard let basic = store.basic() else { return print("HMResourceHistoryManager: Can not get Basic") } let historyStore = HMResourceHistoryDataStore.oneTimeEditor() - guard let newHistory = historyStore.insertNewObject(forEntityName: "Resource") as? HMKCResource + guard let newHistory = historyStore.cerateResource() else { return print("HMResourceHistoryManager: Can not create ResourceHIstory") } let now = Date() var nowComp = Calendar.current.dateComponents([.year, .month, .day, .hour, .minute], from: now) @@ -72,14 +68,9 @@ class HMResourceHistoryManager: NSObject { newHistory.experience = basic.experience } private func reduceResourceByConditions(_ store: HMResourceHistoryDataStore, _ target: [Int], _ ago: Date) { -// let minutes: [NSNumber] = target.map { $0 as NSNumber } - let p = NSPredicate(format: "minute IN %@ AND date < %@", target, ago as NSDate) - guard let a = try? store.objects(withEntityName: "Resource", predicate: p), - let resources = a as? [HMKCResource] - else { return } - resources.forEach { store.delete($0) } + store.resources(in: target, older: ago).forEach { store.delete($0) } } - @objc fileprivate func reduce(_ notification: Notification) { + fileprivate func reduce(_ notification: Notification) { let queue = DispatchQueue(label: "HMResourceHistoryManager") queue.async { let store = HMResourceHistoryDataStore.oneTimeEditor() diff --git a/KCD/HMResourceViewController.swift b/KCD/HMResourceViewController.swift index 89d10acc..ad582b47 100644 --- a/KCD/HMResourceViewController.swift +++ b/KCD/HMResourceViewController.swift @@ -47,7 +47,7 @@ class HMResourceViewController: NSViewController { } } - class func keyPathsForValuesAffectingShipNumberColor() -> NSSet { - return NSSet(objects: "maxChara", "shipCount", "minimumColoredShipCount") + class func keyPathsForValuesAffectingShipNumberColor() -> Set { + return ["maxChara", "shipCount", "minimumColoredShipCount"] } } diff --git a/KCD/HMServerDataStore.swift b/KCD/HMServerDataStore.swift index b99f2e85..6ca72e61 100644 --- a/KCD/HMServerDataStore.swift +++ b/KCD/HMServerDataStore.swift @@ -244,8 +244,7 @@ extension HMServerDataStore { func slotItem(byId itemId: Int) -> HMKCSlotItemObject? { let p = NSPredicate(format: "id = %ld", itemId) - let store = HMServerDataStore.oneTimeEditor() - guard let sl = try? store.objects(withEntityName: "SlotItem", predicate: p), + guard let sl = try? objects(withEntityName: "SlotItem", predicate: p), let slotItems = sl as? [HMKCSlotItemObject], let slotItem = slotItems.first else { return nil } diff --git a/KCD/HMSetActionCommand.swift b/KCD/HMSetActionCommand.swift index a525088f..00b1d23e 100644 --- a/KCD/HMSetActionCommand.swift +++ b/KCD/HMSetActionCommand.swift @@ -15,24 +15,22 @@ class HMSetActionCommand: HMJSONCommand { } override func execute() { - guard let areaId = arguments["api_area_id"], + guard let areaIdStr = arguments["api_area_id"], + let areaId = Int(areaIdStr), let rIdsString = arguments["api_base_id"], let actionKindsString = arguments["api_action_kind"] else { return print("Argument is rwong") } - let dIds = rIdsString.components(separatedBy: ",") - let actionKinds = actionKindsString.components(separatedBy: ",") - if dIds.count != actionKinds.count { print("missmatch count") } - let rIds = dIds.map { Int($0) ?? -1 } - let actions: [Int] = actionKinds.map { Int($0) ?? -1 } + let rIds = rIdsString + .components(separatedBy: ",") + .map { Int($0) ?? -1 } + let actions: [Int] = actionKindsString + .components(separatedBy: ",") + .map { Int($0) ?? -1 } + if rIds.count != actions.count { print("missmatch count") } let store = HMServerDataStore.oneTimeEditor() zip(rIds, actions).forEach { (rId: Int, action: Int) in - let p = NSPredicate(format: "area_id == %@ AND rid == %ld", areaId, rId) - guard let ab = try? store.objects(withEntityName: "AirBase", predicate: p), - let airBases = ab as? [HMKCAirBase], - let airBase = airBases.first - else { return print("AirBase is not found") } - airBase.action_kind = action + store.airBase(area: areaId, base: rId)?.action_kind = action } } } diff --git a/KCD/HMSetPlaneCommand.swift b/KCD/HMSetPlaneCommand.swift index ef49b663..de4122d2 100644 --- a/KCD/HMSetPlaneCommand.swift +++ b/KCD/HMSetPlaneCommand.swift @@ -15,8 +15,10 @@ class HMSetPlaneCommand: HMJSONCommand { } override func execute() { - guard let areaId = arguments["api_area_id"], - let rId = arguments["api_base_id"], + guard let areaIdStr = arguments["api_area_id"], + let areaId = Int(areaIdStr), + let rIdStr = arguments["api_base_id"], + let rId = Int(rIdStr), let squadronIdString = arguments["api_squadron_id"], let squadronId = Int(squadronIdString) else { return print("Argument is wrong") } @@ -34,10 +36,7 @@ class HMSetPlaneCommand: HMJSONCommand { else { return print("api_plane_info is wrong") } let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "area_id == %@ AND rid == %@", areaId, rId) - guard let ab = try? store.objects(withEntityName: "AirBase", predicate: p), - let airbases = ab as? [HMKCAirBase], - let airbase = airbases.first + guard let airbase = store.airBase(area: areaId, base: rId) else { return print("AirBase is not found") } let planes = airbase.planeInfo guard planes.count >= squadronId, @@ -51,10 +50,6 @@ class HMSetPlaneCommand: HMJSONCommand { airbase.distance = distance - guard let m = try? store.objects(withEntityName: "Material", predicate: nil), - let materials = m as? [HMKCMaterial], - let material = materials.first - else { return print("Material is not found") } - material.bauxite = bauxite + store.material()?.bauxite = bauxite } } diff --git a/KCD/HMShipWindowController.swift b/KCD/HMShipWindowController.swift index 865ea454..020f7917 100644 --- a/KCD/HMShipWindowController.swift +++ b/KCD/HMShipWindowController.swift @@ -18,16 +18,14 @@ class HMShipWindowController: NSWindowController { dynamic var missionTime: NSNumber? @IBAction func changeMissionTime(_ sender: AnyObject?) { + window?.endEditing(for: nil) + let store = HMServerDataStore.oneTimeEditor() - let predicate = NSPredicate(format: "id = %d", argumentArray: [missionFleetNumber]) - guard let a = try? store.objects(withEntityName: "Deck", predicate: predicate), - let decks = a as? [HMKCDeck] , - decks.count != 0 + guard let deck = store.deck(byId: missionFleetNumber) else { return } - window?.endEditing(for: nil) - guard let t = missionTime as? Double else { return } - let date = Date(timeIntervalSinceNow: t) - let time = date.timeIntervalSince1970 * 1_000 - decks[0].mission_2 = Int(time) + guard let t = missionTime as? Double + else { return } + let time = Date(timeIntervalSinceNow: t).timeIntervalSince1970 * 1_000 + deck.mission_2 = Int(time) } } diff --git a/KCD/HMSlotItemEquipTypeTransformer.swift b/KCD/HMSlotItemEquipTypeTransformer.swift index e0c8feb3..29d1896b 100644 --- a/KCD/HMSlotItemEquipTypeTransformer.swift +++ b/KCD/HMSlotItemEquipTypeTransformer.swift @@ -13,14 +13,9 @@ class HMSlotItemEquipTypeTransformer: ValueTransformer { return String.self as! AnyClass } override func transformedValue(_ value: Any?) -> Any? { - guard let v = value as? Int else { return nil } - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %d", v) - guard let a = try? store.objects(withEntityName: "MasterSlotItemEquipType", predicate: predicate), - let types = a as? [HMKCMasterSlotItemEquipTypeObject], - let type = types.first + guard let id = value as? Int else { return nil } - return type.name + return HMServerDataStore.default.masterSlotItemEquipType(by: id)?.name } } diff --git a/KCD/HMSlotItemLevelView.swift b/KCD/HMSlotItemLevelView.swift index ea0fefa8..9de05d1c 100644 --- a/KCD/HMSlotItemLevelView.swift +++ b/KCD/HMSlotItemLevelView.swift @@ -12,7 +12,11 @@ class HMSlotItemLevelView: NSTextField { var slotItemID: NSNumber? { didSet { - fetchSlotItem() + slotItemController.content = nil + guard let itemId = slotItemID as? Int, + let slotItem = HMServerDataStore.default.slotItem(byId: itemId) + else { return } + slotItemController.content = slotItem needsDisplay = true } } @@ -22,14 +26,10 @@ class HMSlotItemLevelView: NSTextField { dynamic var slotItemController: NSObjectController dynamic var slotItemLevel: NSNumber? { - didSet { - needsDisplay = true - } + didSet { needsDisplay = true } } dynamic var slotItemAlv: NSNumber? { - didSet { - needsDisplay = true - } + didSet { needsDisplay = true } } override init(frame frameRect: NSRect) { @@ -62,35 +62,14 @@ class HMSlotItemLevelView: NSTextField { drawAirLevel() } - private func fetchSlotItem() { - slotItemController.content = nil - guard let itemId = slotItemID as? Int else { return } - if itemId == -1 { return } - - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %d", argumentArray: [itemId]) - guard let items = try? store.objects(withEntityName: "SlotItem", predicate: predicate) - else { - Swift.print("SlotItem is Invalid") - return - } - guard items.count != 0 else { - Swift.print("Can not find SlotItem for \(itemId)") - return - } - slotItemController.content = items[0] - } - private var maskImage: CGImage? { - get { - if let alv = slotItemAlv as? Int { - if alv != 0 { return airLevelMaskImage } - } - if let lv = slotItemLevel as? Int { - if lv != 0 { return levelMaskImage } - } - return nil + if let alv = slotItemAlv as? Int { + if alv != 0 { return airLevelMaskImage } + } + if let lv = slotItemLevel as? Int { + if lv != 0 { return levelMaskImage } } + return nil } private func maskImage(middle1: CGFloat, middle2: CGFloat) -> CGImage { let bounds = self.bounds @@ -117,20 +96,16 @@ class HMSlotItemLevelView: NSTextField { return r } private var levelMaskImage: CGImage { - get { - if let r = HMSlotItemLevelView.sLevelMaskImage { return r } - - HMSlotItemLevelView.sLevelMaskImage = maskImage(middle1: 0.75, middle2: 0.85) - return HMSlotItemLevelView.sLevelMaskImage! - } + if let r = HMSlotItemLevelView.sLevelMaskImage { return r } + + HMSlotItemLevelView.sLevelMaskImage = maskImage(middle1: 0.75, middle2: 0.85) + return HMSlotItemLevelView.sLevelMaskImage! } private var airLevelMaskImage: CGImage { - get { - if let r = HMSlotItemLevelView.sAirLevelMaskImage { return r } - - HMSlotItemLevelView.sAirLevelMaskImage = maskImage(middle1: 0.65, middle2: 0.75) - return HMSlotItemLevelView.sAirLevelMaskImage! - } + if let r = HMSlotItemLevelView.sAirLevelMaskImage { return r } + + HMSlotItemLevelView.sAirLevelMaskImage = maskImage(middle1: 0.65, middle2: 0.75) + return HMSlotItemLevelView.sAirLevelMaskImage! } private let offset: CGFloat = 28 @@ -139,97 +114,83 @@ class HMSlotItemLevelView: NSTextField { private let anglePoint: CGFloat = 4.0 private var levelOneBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 1.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 1.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) + return path } private var levelTwoBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 1.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 1.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) + return path } private var levelThreeBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 1.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 1.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2, NSHeight(bounds))) + return path } private var levelFourBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 2.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset - slideOffset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 2.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset - slideOffset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) + return path } private var levelFiveBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 2.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset - slideOffset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding - slideOffset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 2.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset - slideOffset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding - slideOffset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) + return path } private var levelSixBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 2.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset - slideOffset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding - slideOffset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2 - slideOffset, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 2.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset - slideOffset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding - slideOffset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2 - slideOffset, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding * 2, NSHeight(bounds))) + return path } private var levelSevenBezierPath: NSBezierPath { - get { - let bounds = self.bounds - let path = NSBezierPath() - path.lineWidth = 2.0 - path.move(to: NSMakePoint(NSWidth(bounds) - offset - anglePoint, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds) * 0.5)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - anglePoint, NSHeight(bounds))) - - path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding - anglePoint, 0)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds) * 0.5)) - path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding - anglePoint, NSHeight(bounds))) - return path - } + let bounds = self.bounds + let path = NSBezierPath() + path.lineWidth = 2.0 + path.move(to: NSMakePoint(NSWidth(bounds) - offset - anglePoint, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset, NSHeight(bounds) * 0.5)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - anglePoint, NSHeight(bounds))) + + path.move(to: NSMakePoint(NSWidth(bounds) - offset - padding - anglePoint, 0)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding, NSHeight(bounds) * 0.5)) + path.line(to: NSMakePoint(NSWidth(bounds) - offset - padding - anglePoint, NSHeight(bounds))) + return path } private func bezierPathForALevel(level: Int) -> NSBezierPath? { switch level { @@ -282,7 +243,6 @@ class HMSlotItemLevelView: NSTextField { colorForALevel(level: alv)?.set() shadowForALevel(level: alv)?.set() bezierPathForALevel(level: alv)?.stroke() - } private var levelFont: NSFont { @@ -290,9 +250,7 @@ class HMSlotItemLevelView: NSTextField { return NSFont.monospacedDigitSystemFont(ofSize: size, weight: NSFontWeightRegular) } private var levelColor: NSColor { - get { - return NSColor(calibratedRed: 0.135, green: 0.522, blue: 0.619, alpha: 1.0) - } + return NSColor(calibratedRed: 0.135, green: 0.522, blue: 0.619, alpha: 1.0) } private func drawLevel() { guard let lv = slotItemLevel as? Int else { return } diff --git a/KCD/HMSlotItemShortNameTransformer.swift b/KCD/HMSlotItemShortNameTransformer.swift index 2507ce39..219a1db5 100644 --- a/KCD/HMSlotItemShortNameTransformer.swift +++ b/KCD/HMSlotItemShortNameTransformer.swift @@ -26,12 +26,8 @@ class HMSlotItemShortNameTransformer: ValueTransformer { return String.self as! AnyClass } override func transformedValue(_ value: Any?) -> Any? { - guard let v = value as? Int, v != 0, v != -1 else { return nil } - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %d", v) - guard let a = try? store.objects(withEntityName: "SlotItem", predicate: predicate), - let items = a as? [HMKCSlotItemObject], - let item = items.first + guard let id = value as? Int, id != 0, id != -1 else { return nil } + guard let item = HMServerDataStore.default.slotItem(byId: id) else { return nil } let itemId = item.master_slotItem.id return HMSlotItemShortNameTransformer.slotItemShortName[itemId] ?? item.name diff --git a/KCD/HMSlotResetCommand.swift b/KCD/HMSlotResetCommand.swift index e979967b..733cc662 100644 --- a/KCD/HMSlotResetCommand.swift +++ b/KCD/HMSlotResetCommand.swift @@ -18,23 +18,19 @@ class HMSlotResetCommand: HMJSONCommand { guard let si = arguments["api_id"], let shipId = Int(si) else { return print("api_id is wrong") } - let p = NSPredicate(format: "id = %ld", shipId) let store = HMServerDataStore.oneTimeEditor() - guard let s = try? store.objects(withEntityName: "Ship", predicate: p), - let ships = s as? [HMKCShipObject], - let ship = ships.first + guard let ship = store.ship(byId: shipId) else { return print("Not found Ship") } guard let sl = json["api_data"] as? [String:Any], let slotItems = sl["api_slot"] as? [Int] else { return print("Can not parse api_data.api_slot") } - guard let sli = try? store.objects(withEntityName: "SlotItem", predicate: nil), - let storedSlotItems = sli as? [HMKCSlotItemObject] - else { return print("Can not load SlotItem") } - slotItems.enumerated().forEach { ship.setValue($0.element, forKey: "slot_\($0.offset)") } + + // TODO: バイバリサーチ + let storedSlotItems = store.slotItems() let newSet = slotItems.flatMap { (slotItem) -> HMKCSlotItemObject? in if slotItem == 0 || slotItem == -1 { return nil } diff --git a/KCD/HMSlotitemNameTransformer.swift b/KCD/HMSlotitemNameTransformer.swift index acb8cb2a..ecb26a0d 100644 --- a/KCD/HMSlotitemNameTransformer.swift +++ b/KCD/HMSlotitemNameTransformer.swift @@ -13,13 +13,8 @@ class HMSlotitemNameTransformer: ValueTransformer { return String.self as! AnyClass } override func transformedValue(_ value: Any?) -> Any? { - guard let v = value as? Int, v != 0, v != -1 else { return nil } - let store = HMServerDataStore.default - let predicate = NSPredicate(format: "id = %d", v) - guard let a = try? store.objects(withEntityName: "SlotItem", predicate: predicate), - let array = a as? [HMKCSlotItemObject], - array.count != 0 + guard let id = value as? Int, id != 0, id != -1 else { return nil } - return array[0].name + return HMServerDataStore.default.slotItem(byId: id)?.name } } diff --git a/KCD/HMStoreCreateSlotItemHistoryCommand.swift b/KCD/HMStoreCreateSlotItemHistoryCommand.swift index 623eeb3c..1880c566 100644 --- a/KCD/HMStoreCreateSlotItemHistoryCommand.swift +++ b/KCD/HMStoreCreateSlotItemHistoryCommand.swift @@ -26,28 +26,15 @@ class HMStoreCreateSlotItemHistoryCommand: HMJSONCommand { let name = masterSlotItemName(sccess: success, data: data) let numberOfUsedKaihatuSizai = success ? 1 : 0 - let p = NSPredicate(format: "id = 1") - guard let d = try? store.objects(withEntityName: "Deck", predicate: p), - let decks = d as? [HMKCDeck], - let deck = decks.first - else { return print("Deck is Wrong") } - let ship0 = deck.ship_0 + guard let ship0 = HMServerDataStore.default.deck(byId: 1)?.ship_0, + let flagShip = HMServerDataStore.default.ship(byId: ship0) + else { return print("Flagship is not found") } - let pp = NSPredicate(format: "id = %ld", ship0) - guard let s = try? store.objects(withEntityName: "Ship", predicate: pp), - let ships = s as? [HMKCShipObject], - let flagShip = ships.first - else { return print("Ship is not found") } - let flagShipLv = flagShip.lv - let flagShipName = flagShip.name - - guard let b = try? store.objects(withEntityName: "Basic", predicate: nil), - let basics = b as? [HMKCBasic], - let basic = basics.first + guard let basic = HMServerDataStore.default.basic() else { return print("Basic is wrong") } let localStore = HMLocalDataStore.oneTimeEditor() - guard let newHistory = localStore.insertNewObject(forEntityName: "KaihatuHistory") as? HMKaihatuHistory + guard let newHistory = localStore.createKaihatuHistory() else { return print("Can not create new KaihatuHistory entry") } newHistory.name = name newHistory.fuel = fuel @@ -55,14 +42,12 @@ class HMStoreCreateSlotItemHistoryCommand: HMJSONCommand { newHistory.steel = steel newHistory.bauxite = bauxite newHistory.kaihatusizai = numberOfUsedKaihatuSizai - newHistory.flagShipLv = flagShipLv - newHistory.flagShipName = flagShipName + newHistory.flagShipLv = flagShip.lv + newHistory.flagShipName = flagShip.name newHistory.commanderLv = basic.level newHistory.date = Date() } - private let store = HMServerDataStore.default - private func masterSlotItemName(sccess: Bool, data: [String:Any]) -> String { if !sccess { return NSLocalizedString("fail to develop", comment: "fail to develop") @@ -74,14 +59,6 @@ class HMStoreCreateSlotItemHistoryCommand: HMJSONCommand { return "" } - let p = NSPredicate(format: "id = %ld", slotItemId) - guard let msi = try? store.objects(withEntityName: "MasterSlotItem", predicate: p), - let masterSlotItems = msi as? [HMKCMasterSlotItemObject], - let masterSlotItem = masterSlotItems.first - else { - print("MasterSlotItem") - return "" - } - return masterSlotItem.name + return HMServerDataStore.default.masterSlotItem(by: slotItemId)?.name ?? "" } } diff --git a/KCD/HMUpdateQuestListCommand.swift b/KCD/HMUpdateQuestListCommand.swift index f31bfa5f..a56cdc57 100644 --- a/KCD/HMUpdateQuestListCommand.swift +++ b/KCD/HMUpdateQuestListCommand.swift @@ -14,10 +14,7 @@ class HMUpdateQuestListCommand: HMJSONCommand { let qno = Int(q) else { return print("api_quest_id is wrong") } let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "%K = %ld", "no", qno) - guard let qu = try? store.objects(withEntityName: "Quest", predicate: p), - let que = qu as? [HMKCQuest], - let quest = que.first + guard let quest = store.quest(by: qno) else { return print("Not found Quest") } quest.progress_flag = 0 quest.state = 1 diff --git a/KCD/HMUpdateSlotItemCommand.swift b/KCD/HMUpdateSlotItemCommand.swift index 7b1139f4..b99adf6d 100644 --- a/KCD/HMUpdateSlotItemCommand.swift +++ b/KCD/HMUpdateSlotItemCommand.swift @@ -18,12 +18,9 @@ class HMUpdateSlotItemCommand: HMJSONCommand { guard let newSlotItemId = data["api_id"] as? Int else { return print("api_id is wrong") } let store = HMServerDataStore.oneTimeEditor() - let p = NSPredicate(format: "id = %ld", slotItemId) - guard let ms = try? store.objects(withEntityName: "MasterSlotItem", predicate: p), - let masterSlotItems = ms as? [HMKCMasterSlotItemObject], - let masterSlotItem = masterSlotItems.first + guard let masterSlotItem = store.masterSlotItem(by: slotItemId) else { return print("MasterSlotItem is not found") } - guard let new = store.insertNewObject(forEntityName: "SlotItem") as? HMKCSlotItemObject + guard let new = store.createSlotItem() else { return print("Can not create new SlotItem") } new.id = newSlotItemId new.master_slotItem = masterSlotItem diff --git a/KCD/HMUpgradableShipsWindowController.swift b/KCD/HMUpgradableShipsWindowController.swift index 64cac1d9..b822181d 100644 --- a/KCD/HMUpgradableShipsWindowController.swift +++ b/KCD/HMUpgradableShipsWindowController.swift @@ -92,8 +92,8 @@ class HMUpgradableShipsWindowController: NSWindowController { excludeShiIDs = array } - dynamic class func keyPathsForValuesAffectingFilterPredicate() -> NSSet { - return NSSet(objects: "showLevelOneShipInUpgradableList", "showsExcludedShipInUpgradableList") + dynamic class func keyPathsForValuesAffectingFilterPredicate() -> Set { + return ["showLevelOneShipInUpgradableList", "showsExcludedShipInUpgradableList"] } dynamic var filterPredicate: NSPredicate? { get { -- 2.11.0