OSDN Git Service

分岐係数込みの判定式(33)の値が誤っていたので修正
[kcd/KCD.git] / KCD / HistoryTableViewController.swift
index bccfa53..36ba893 100644 (file)
@@ -7,6 +7,7 @@
 //
 
 import Cocoa
+import Doutaku
 
 private protocol Markable {
     
@@ -33,27 +34,34 @@ class HistoryTableViewController: NSViewController {
     
     // Subbclass MUST override these.
     var predicateFormat: String { fatalError("Subbclass MUST implement.") }
-    func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+    func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
         
         fatalError("Subbclass MUST implement.")
     }
     
-    @IBOutlet var controller: NSArrayController!
-    @IBOutlet var tableView: NSTableView!
+    @IBOutlet private(set) var controller: NSArrayController!
+    @IBOutlet private(set) var tableView: NSTableView!
     
     @IBAction func delete(_ sender: AnyObject?) {
         
         let store = LocalDataStore.oneTimeEditor()
         
-        guard let controller = controller else { return }
-        guard let selection = controller.selectedObjects as? [NSManagedObject] else { return }
+        guard let controller = controller else {
+            
+            return
+        }
+        guard let selection = controller.selectedObjects as? [NSManagedObject] else {
+            
+            return
+        }
         
         let selectedIndex = controller.selectionIndex
-        selection
-            .lazy
-            .map { $0.objectID }
-            .map(store.object(with:))
-            .forEach(store.delete)
+        store.sync {
+            
+            selection
+                .compactMap(store.exchange)
+                .forEach(store.delete)
+        }
         
         if selectedIndex > 1 {
             
@@ -63,41 +71,67 @@ class HistoryTableViewController: NSViewController {
     
     @IBAction func addMark(_ sender: AnyObject?) {
         
-        guard let clickedRow = tableView?.clickedRow else { return }
-        guard let items = controller?.arrangedObjects as? [HistoryObject] else { return }
-        guard case 0..<items.count = clickedRow else { return }
+        guard let clickedRow = tableView?.clickedRow else {
+            
+            return
+        }
+        guard let items = controller?.arrangedObjects as? [HistoryObject] else {
+            
+            return
+        }
+        guard case 0..<items.count = clickedRow else {
+            
+            return
+        }
         
         let clickedObject = items[clickedRow]
-        let predicate = NSPredicate(#keyPath(KenzoMark.date), equal: clickedObject.date)
+        let predicate = Predicate(\KenzoMark.date, equalTo: clickedObject.date)
         
         let store = LocalDataStore.oneTimeEditor()
-        
-        if let items = try? objects(of: predicate, in: store),
-            var history = items.first as? Markable {
+        store.sync {
+            
+            if let items = try? self.objects(of: predicate, in: store),
+                var history = items.first as? Markable {
+                
+                let currentMark = history.mark
+                history.mark = !currentMark
+            }
             
-            history.mark = !history.mark
+            store.save()
         }
-        
-        store.save(errorHandler: store.presentOnMainThread)
     }
     
     override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool {
         
-        guard let itemTag = MenuItemTag(rawValue: menuItem.tag) else { return false }
+        guard let itemTag = MenuItemTag(rawValue: menuItem.tag) else {
+            
+            return false
+        }
         
         switch itemTag {
+            
         case .delete:
+            
             return controller.selectionIndex != -1
             
         case .addMark:
+            
             menuItem.isEnabled = false
-            guard let clickedRow = tableView?.clickedRow else { return false }
-            guard let items = controller?.arrangedObjects as? [Markable] else { return false }
-            guard case 0..<items.count = clickedRow else { return false }
+            guard let clickedRow = tableView?.clickedRow else {
+                
+                return false
+            }
+            guard let items = controller?.arrangedObjects as? [Markable] else {
+                
+                return false
+            }
+            guard case 0..<items.count = clickedRow else {
+                
+                return false
+            }
             
-            let clickedObject = items[clickedRow]
             menuItem.isEnabled = true
-            if clickedObject.mark {
+            if items[clickedRow].mark {
                 
                 menuItem.title = LocalizedStrings.removeMark.string
                 
@@ -124,7 +158,7 @@ extension HistoryTableViewController: NSTableViewDelegate {
 final class KaihatsuHistoryTableViewController: HistoryTableViewController {
     
     override var predicateFormat: String { return "name contains $value" }
-    override func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+    override func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
         
         return try store.objects(of: KaihatuHistory.entity, predicate: predicate)
     }
@@ -133,7 +167,7 @@ final class KaihatsuHistoryTableViewController: HistoryTableViewController {
 final class KenzoHistoryTableViewController: HistoryTableViewController {
     
     override var predicateFormat: String { return "name contains $value" }
-    override func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+    override func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
         
         return try store.objects(of: KenzoHistory.entity, predicate: predicate)
     }
@@ -142,7 +176,7 @@ final class KenzoHistoryTableViewController: HistoryTableViewController {
 final class DropShipHistoryTableViewController: HistoryTableViewController {
     
     override var predicateFormat: String { return "shipName contains $value" }
-    override func objects(of predicate: NSPredicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
+    override func objects(of predicate: Predicate?, in store: LocalDataStore) throws -> [NSManagedObject] {
         
         return try store.objects(of: DropShipHistory.entity, predicate: predicate)
     }