OSDN Git Service

Doutaku を 1.0 にアップデート
[kcd/KCD.git] / KCD / BookmarkListViewController.swift
index 3a30593..ebde590 100644 (file)
@@ -22,10 +22,10 @@ final class BookmarkListViewController: NSViewController {
     
     @objc let managedObjectContext = BookmarkManager.shared.manageObjectContext
     
-    @IBOutlet var tableView: NSTableView!
-    @IBOutlet var bookmarkController: NSArrayController!
-    @IBOutlet var contextMenu: NSMenu!
-    @IBOutlet var popover: NSPopover!
+    @IBOutlet private var tableView: NSTableView!
+    @IBOutlet private var bookmarkController: NSArrayController!
+    @IBOutlet private var contextMenu: NSMenu!
+    @IBOutlet private var popover: NSPopover!
     
     weak var delegate: BookmarkListViewControllerDelegate?
     var editorController: BookmarkEditorViewController?
@@ -53,8 +53,14 @@ final class BookmarkListViewController: NSViewController {
         
         let clickedRow = tableView.clickedRow
         
-        guard let bookmarks = bookmarkController.arrangedObjects as? [Any] else { return }
-        guard case 0..<bookmarks.count = clickedRow else { return }
+        guard let bookmarks = bookmarkController.arrangedObjects as? [Any] else {
+            
+            return
+        }
+        guard case 0..<bookmarks.count = clickedRow else {
+            
+            return
+        }
         
         editorController?.representedObject = bookmarks[clickedRow]
         popover.show(relativeTo: tableView.rect(ofRow: clickedRow), of: tableView, preferredEdge: .minY)
@@ -64,8 +70,14 @@ final class BookmarkListViewController: NSViewController {
         
         let clickedRow = tableView.clickedRow
         
-        guard let bookmarks = bookmarkController.arrangedObjects as? [Any] else { return }
-        guard case 0..<bookmarks.count = clickedRow else { return }
+        guard let bookmarks = bookmarkController.arrangedObjects as? [Any] else {
+            
+            return
+        }
+        guard case 0..<bookmarks.count = clickedRow else {
+            
+            return
+        }
         
         bookmarkController.remove(atArrangedObjectIndex: clickedRow)
     }
@@ -75,10 +87,14 @@ extension BookmarkListViewController: NSTableViewDelegate, NSTableViewDataSource
     
     func reorderingBoolmarks() {
         
-        guard let objects = bookmarkController.arrangedObjects as? [Bookmark] else { return }
+        guard let objects = bookmarkController.arrangedObjects as? [Bookmark] else {
+            
+            return
+        }
         
         var order = 100
         objects.forEach {
+            
             $0.order = order
             order += 100
         }
@@ -86,28 +102,46 @@ extension BookmarkListViewController: NSTableViewDelegate, NSTableViewDataSource
     
     func tableViewSelectionDidChange(_ notification: Notification) {
         
-        guard let tableView = notification.object as? NSTableView else { return }
-        guard let bookmarks = bookmarkController.arrangedObjects as? [Bookmark] else { return }
+        guard let tableView = notification.object as? NSTableView else {
+            
+            return
+        }
+        guard let bookmarks = bookmarkController.arrangedObjects as? [Bookmark] else {
+            
+            return
+        }
         
         let selection = tableView.selectedRow
         tableView.deselectAll(nil)
         
-        guard case 0..<bookmarks.count = selection else { return }
+        guard case 0..<bookmarks.count = selection else {
+            
+            return
+        }
         
         delegate?.didSelectBookmark(bookmarks[selection])
     }
     
     func tableView(_ tableView: NSTableView, pasteboardWriterForRow row: Int) -> NSPasteboardWriting? {
         
-        guard let objects = bookmarkController.arrangedObjects as? [NSPasteboardWriting] else { return nil }
+        guard let objects = bookmarkController.arrangedObjects as? [NSPasteboardWriting] else {
+            
+            return nil
+        }
         
         return objects[row]
     }
     
     func tableView(_ tableView: NSTableView, draggingSession session: NSDraggingSession, willBeginAt screenPoint: NSPoint, forRowIndexes rowIndexes: IndexSet) {
         
-        guard let first = rowIndexes.first else { return }
-        guard let last = rowIndexes.last else { return }
+        guard let first = rowIndexes.first else {
+            
+            return
+        }
+        guard let last = rowIndexes.last else {
+            
+            return
+        }
         
         draggingRange = first...last
     }
@@ -122,9 +156,18 @@ extension BookmarkListViewController: NSTableViewDelegate, NSTableViewDataSource
                    proposedRow row: Int,
                    proposedDropOperation dropOperation: NSTableView.DropOperation) -> NSDragOperation {
         
-        guard dropOperation == .above else { return [] }
-        guard !(draggingRange ~= row) else { return [] }
-        guard let tableView = info.draggingSource() as? NSTableView, tableView == self.tableView else { return [] }
+        guard dropOperation == .above else {
+            
+            return []
+        }
+        guard !(draggingRange ~= row) else {
+            
+            return []
+        }
+        guard let tableView = info.draggingSource() as? NSTableView, tableView == self.tableView else {
+            
+            return []
+        }
         
         return .move
     }
@@ -146,23 +189,40 @@ extension BookmarkListViewController: NSTableViewDelegate, NSTableViewDataSource
             return target.order
         }()
         
-        guard let items = info.draggingPasteboard().pasteboardItems else { return false }
+        guard let items = info.draggingPasteboard().pasteboardItems else {
+            
+            return false
+        }
         
         let store = BookmarkManager.shared.editorStore
-        items.enumerated().forEach {
+        store.sync {
+            
+            items.enumerated().forEach {
+                
+                guard let data = $0.element.data(forType: .bookmarkItem) else {
+                    
+                    return
+                }
+                guard let uri = NSKeyedUnarchiver.unarchiveObject(with: data) as? URL else {
+                    
+                    return
+                }
+                guard let bookmark = store.object(of: Bookmark.self, forURIRepresentation: uri) else {
+                    
+                    return
+                }
+                
+                bookmark.order = targetOrder + $0.offset + 1
+            }
             
-            guard let data = $0.element.data(forType: .bookmarkItem) else { return }
-            guard let uri = NSKeyedUnarchiver.unarchiveObject(with: data) as? URL else { return }
-            guard let oID = managedObjectContext.persistentStoreCoordinator?.managedObjectID(forURIRepresentation: uri) else { return }
-            guard let bookmark = store.object(of: Bookmark.entity, with: oID) else { return }
+            store.save()
             
-            bookmark.order = targetOrder + $0.offset + 1
+            self.bookmarkController.rearrangeObjects()
+            self.reorderingBoolmarks()
+            self.bookmarkController.rearrangeObjects()
         }
         
-        store.save(errorHandler: store.presentOnMainThread)
-        bookmarkController.rearrangeObjects()
-        reorderingBoolmarks()
-        bookmarkController.rearrangeObjects()
+        tableView.reloadData()
         
         return true
     }