OSDN Git Service

Doutakuを導入
[kcd/KCD.git] / KCD / AppDelegate.swift
index 303b85d..2cb4320 100644 (file)
@@ -8,29 +8,19 @@
 
 import Cocoa
 
-fileprivate extension Selector {
-    
-    static let fireInAppDelegate = #selector(AppDelegate.fire(_:))
-    
-    static let saveLocalData = #selector(AppDelegate.saveLocalData(_:))
-    static let loadLocalData = #selector(AppDelegate.loadLocalData(_:))
-    
-    static let removeDatabaseFile = #selector(AppDelegate.removeDatabaseFile(_:))
-}
-
 @NSApplicationMain
 final class AppDelegate: NSObject {
     
     static var shared: AppDelegate {
         
-        // swiftlint:disable force_cast
-        return NSApplication.shared().delegate as! AppDelegate
+        // swiftlint:disable:next force_cast
+        return NSApplication.shared.delegate as! AppDelegate
     }
+        
+    let appNameForUserAgent: String = "KCD(1.9b36) is not Safari/604.4.7"
+    private(set) var fleetManager: FleetManager?
     
-    let appNameForUserAgent: String = "KCD(1.9b11) is not Safari/603.2.4"
-    let fleetManager: FleetManager = FleetManager()
-    
-    let windowManager = WindowManager()
+    private let windowManager = WindowManager()
     
     private let historyCleanNotifer = PeriodicNotifier(hour: 0, minutes: 7)
     private let jsonTracker = JSONTracker()
@@ -38,8 +28,8 @@ final class AppDelegate: NSObject {
     private let resourceHistory = ResourceHistoryManager()
     
     // MARK: - Variable
-    @IBOutlet var debugMenuItem: NSMenuItem!
-    @IBOutlet var billingWindowMenuItem: NSMenuItem!
+    @IBOutlet private var debugMenuItem: NSMenuItem!
+    @IBOutlet private var billingWindowMenuItem: NSMenuItem!
     
     var jsonViewWindowController: JSONViewWindowController? {
         
@@ -48,16 +38,16 @@ final class AppDelegate: NSObject {
     
     private var browserWindowControllers: [ExternalBrowserWindowController] = []
     private var updaters: [() -> Void] = []
-    fileprivate var logedJSONViewWindowController: JSONViewWindowController?
+    private var logedJSONViewWindowController: JSONViewWindowController?
     private var didLoadedMainMenu = false
     
     var screenShotSaveDirectory: String {
         
         get {
-            return UserDefaults.standard.screenShotSaveDirectory ?? ApplicationDirecrories.pictures.path
+            return UserDefaults.standard[.screenShotSaveDirectory] ?? ApplicationDirecrories.pictures.path
         }
         set {
-            UserDefaults.standard.screenShotSaveDirectory = newValue
+            UserDefaults.standard[.screenShotSaveDirectory] = newValue
         }
     }
     
@@ -66,19 +56,19 @@ final class AppDelegate: NSObject {
         return URL(fileURLWithPath: screenShotSaveDirectory)
     }
     
-    dynamic var monospaceSystemFont11: NSFont {
+    @objc dynamic var monospaceSystemFont11: NSFont {
         
-        return NSFont.monospacedDigitSystemFont(ofSize: 11, weight: NSFontWeightRegular)
+        return NSFont.monospacedDigitSystemFont(ofSize: 11, weight: .regular)
     }
     
-    dynamic var monospaceSystemFont12: NSFont {
+    @objc dynamic var monospaceSystemFont12: NSFont {
         
-        return NSFont.monospacedDigitSystemFont(ofSize: 12, weight: NSFontWeightRegular)
+        return NSFont.monospacedDigitSystemFont(ofSize: 12, weight: .regular)
     }
     
-    dynamic var monospaceSystemFont13: NSFont {
+    @objc dynamic var monospaceSystemFont13: NSFont {
         
-        return NSFont.monospacedDigitSystemFont(ofSize: 13, weight: NSFontWeightRegular)
+        return NSFont.monospacedDigitSystemFont(ofSize: 13, weight: .regular)
     }
     
     // MARK: - Function
@@ -88,14 +78,16 @@ final class AppDelegate: NSObject {
         
         didLoadedMainMenu = true
         
+        fleetManager = FleetManager()
+        
         ValueTransformerRegister.registerAll()
-        UserDefaults.registerAllDefaults()
+        UserDefaults.standard.register(defaults: DefaultKeys.defaults)
         CustomHTTPProtocol.start()
         CommandRegister.register()
         
         windowManager.prepair()
         
-        if !UserDefaults.standard.showsDebugMenu { debugMenuItem.isHidden = true }
+        if !UserDefaults.standard[.showsDebugMenu] { debugMenuItem.isHidden = true }
         
         NotificationCenter.default
             .addObserver(forName: .Periodic, object: historyCleanNotifer, queue: nil) { _ in
@@ -119,12 +111,7 @@ final class AppDelegate: NSObject {
         return windowManager.createNewBrowser()
     }
     
-    func registerScreenshot(_ image: NSBitmapImageRep, fromOnScreen: NSRect) {
-        
-        windowManager.registerScreenshot(image, fromOnScreen: fromOnScreen)
-    }
-    
-    func fire(_ timer: Timer) {
+    @objc func fire(_ timer: Timer) {
         
         updaters.forEach { $0() }
     }
@@ -180,8 +167,11 @@ extension AppDelegate {
     
     @IBAction func removeDatabaseFile(_ sender: AnyObject?) {
         
-        guard let path = Bundle.main.path(forResource: "RemoveDatabaseFileAndRestart", ofType: "app")
-            else { return print("Can not find RemoveDatabaseFileAndRestart.app") }
+        guard let path = Bundle.main.path(forResource: "RemoveDatabaseFileAndRestart", ofType: "app") else {
+            
+            return Logger.shared.log("Can not find RemoveDatabaseFileAndRestart.app")
+        }
+        
         let process = Process()
         process.launchPath = "/usr/bin/open"
         process.arguments = [path]
@@ -243,10 +233,13 @@ extension AppDelegate {
         guard let action = menuItem.action else { return false }
         
         switch action {
-        case Selector.saveLocalData, Selector.loadLocalData:
+            
+        case #selector(AppDelegate.saveLocalData(_:)),
+             #selector(AppDelegate.loadLocalData(_:)):
+            
             return true
             
-        case Selector.removeDatabaseFile:
+        case #selector(AppDelegate.removeDatabaseFile(_:)):
             return true
             
         case #selector(openInDeckBuilder(_:)):
@@ -262,10 +255,17 @@ extension AppDelegate: NSApplicationDelegate {
     
     func applicationWillFinishLaunching(_ notification: Notification) {
         
+        if NSEvent.modifierFlags == .option {
+            
+            removeDatabaseFile(nil)
+            
+            exit(0)
+        }
+        
         NSUserNotificationCenter.default.delegate = self
         Timer.scheduledTimer(timeInterval: 0.33,
                              target: self,
-                             selector: .fireInAppDelegate,
+                             selector: #selector(AppDelegate.fire(_:)),
                              userInfo: nil,
                              repeats: true)
     }
@@ -285,12 +285,12 @@ extension AppDelegate: NSUserNotificationCenterDelegate {
 }
 
 @available(OSX 10.12.2, *)
-fileprivate var objectForTouchBar: [Int: NSTouchBar] = [:]
+private var objectForTouchBar: [Int: NSTouchBar] = [:]
 
 @available(OSX 10.12.2, *)
 extension AppDelegate: NSTouchBarProvider {
     
-    @IBOutlet var mainTouchBar: NSTouchBar? {
+    @IBOutlet private var mainTouchBar: NSTouchBar? {
         
         get { return objectForTouchBar[hash] }
         set { objectForTouchBar[hash] = newValue }
@@ -302,8 +302,8 @@ extension AppDelegate: NSTouchBarProvider {
             if windowManager.isMainWindowMostFront { return nil }
             if let _ = mainTouchBar { return mainTouchBar }
             
-            var topLevel: NSArray = []
-            Bundle.main.loadNibNamed("MainTouchBar", owner: self, topLevelObjects: &topLevel)
+            var topLevel: NSArray?
+            Bundle.main.loadNibNamed(NSNib.Name("MainTouchBar"), owner: self, topLevelObjects: &topLevel)
             
             return mainTouchBar
         }