OSDN Git Service

c86fe5c8153cc47bedfaf51cae44da515cddba76
[kcd/KCD.git] / KCD / TemporaryDataStore.swift
1 //
2 //  TemporaryDataStore.swift
3 //  KCD
4 //
5 //  Created by Hori,Masaki on 2017/01/06.
6 //  Copyright © 2017年 Hori,Masaki. All rights reserved.
7 //
8
9 import Cocoa
10
11 extension CoreDataIntormation {
12     static let temporary = CoreDataIntormation(
13         modelName: "Temporary",
14         storeFileName: ":memory:",
15         storeOptions:[:],
16         storeType: NSInMemoryStoreType,
17         deleteAndRetry: false
18     )
19 }
20 extension CoreDataCore {
21     static let temporary = CoreDataCore(.temporary)
22 }
23
24
25 class TemporaryDataStore: CoreDataAccessor, CoreDataManager {
26     static var `default` = TemporaryDataStore(type: .reader)
27     class func oneTimeEditor() -> TemporaryDataStore {
28         return TemporaryDataStore(type: .editor)
29     }
30     
31     required init(type: CoreDataManagerType) {
32         managedObjectContext =
33             type == .reader ? core.parentManagedObjectContext
34             : core.editorManagedObjectContext()
35     }
36     deinit {
37         saveActionCore()
38     }
39     
40     let core = CoreDataCore.temporary
41     var managedObjectContext: NSManagedObjectContext
42 }
43
44 extension KCBattle: EntityProvider {
45     override class var entityName: String { return "Battle" }
46 }
47 extension KCDamage: EntityProvider {
48     override class var entityName: String { return "Damage" }
49 }
50 extension KCGuardEscaped: EntityProvider {
51     override class var entityName: String { return "GuardEscaped" }
52 }
53
54 extension TemporaryDataStore {
55     func battle() -> KCBattle? {
56         return battles().first
57     }
58     func battles() -> [KCBattle] {
59         guard let battles = try? self.objects(with: KCBattle.entity)
60             else { return [] }
61         return battles
62     }
63     func resetBattle() {
64         battles().forEach { delete($0) }
65     }
66     func createBattle() -> KCBattle? {
67         return insertNewObject(for: KCBattle.entity)
68     }
69     
70     func sortedDamagesById() -> [KCDamage] {
71         let sortDescriptor = NSSortDescriptor(key: "id", ascending: true)
72         guard let damages = try? objects(with: KCDamage.entity, sortDescriptors: [sortDescriptor])
73             else { return [] }
74         return damages
75     }
76     func damages() -> [KCDamage] {
77         guard let damages = try? objects(with: KCDamage.entity)
78             else { return [] }
79         return damages
80     }
81     func createDamage() -> KCDamage? {
82         return insertNewObject(for: KCDamage.entity)
83     }
84     
85     func guardEscaped() -> [KCGuardEscaped] {
86         guard let escapeds = try? objects(with: KCGuardEscaped.entity)
87             else { return [] }
88         return escapeds
89     }
90     func ensuredGuardEscaped(byShipId shipId: Int) -> KCGuardEscaped? {
91         let p = NSPredicate(format: "shipID = %ld AND ensured = TRUE", shipId)
92         guard let escapes = try? objects(with: KCGuardEscaped.entity, predicate: p)
93             else { return nil }
94         return escapes.first
95     }
96     func notEnsuredGuardEscaped() -> [KCGuardEscaped] {
97         let predicate = NSPredicate(format: "ensured = FALSE")
98         guard let escapeds = try? objects(with: KCGuardEscaped.entity, predicate: predicate)
99             else { return [] }
100         return escapeds
101     }
102     func createGuardEscaped() -> KCGuardEscaped? {
103         return insertNewObject(for: KCGuardEscaped.entity)
104     }
105 }