import Cocoa
-fileprivate enum State: Int {
+private enum State: Int {
case none = 0
case hasMission = 1
didSet { time = realTime as NSNumber }
}
- dynamic var name: String?
- dynamic var time: NSNumber?
- dynamic var state: NSNumber?
- dynamic var missionId: NSNumber? {
+ @objc dynamic var name: String?
+ @objc dynamic var time: NSNumber?
+ @objc dynamic var state: NSNumber?
+ @objc dynamic var missionId: NSNumber? {
didSet { updateState() }
}
- dynamic var milliseconds: NSNumber?
- dynamic var fleetName: String?
+ @objc dynamic var milliseconds: NSNumber?
+ @objc dynamic var fleetName: String?
init?(number: Int) {
- guard case 2...4 = number
- else { return nil }
+ guard case 2...4 = number else { return nil }
self.number = number
controller = NSArrayController()
controller.automaticallyRearrangesObjects = true
controller.fetch(nil)
- bind(#keyPath(state), to: controller, withKeyPath: "selection.mission_0")
- bind(#keyPath(missionId), to: controller, withKeyPath: "selection.mission_1")
- bind(#keyPath(milliseconds), to: controller, withKeyPath: "selection.mission_2")
- bind(#keyPath(fleetName), to: controller, withKeyPath: "selection.name")
+ bind(NSBindingName(#keyPath(state)), to: controller, withKeyPath: "selection.mission_0")
+ bind(NSBindingName(#keyPath(missionId)), to: controller, withKeyPath: "selection.mission_1")
+ bind(NSBindingName(#keyPath(milliseconds)), to: controller, withKeyPath: "selection.mission_2")
+ bind(NSBindingName(#keyPath(fleetName)), to: controller, withKeyPath: "selection.name")
}
deinit {
- unbind(#keyPath(state))
- unbind(#keyPath(missionId))
- unbind(#keyPath(milliseconds))
- unbind(#keyPath(fleetName))
+ unbind(NSBindingName(#keyPath(state)))
+ unbind(NSBindingName(#keyPath(missionId)))
+ unbind(NSBindingName(#keyPath(milliseconds)))
+ unbind(NSBindingName(#keyPath(fleetName)))
}
private func updateState() {
guard let state = state as? Int,
- let stat = State(rawValue: state)
- else { return print("unknown State") }
+ let stat = State(rawValue: state) else {
+
+ print("unknown State")
+ return
+ }
if stat == .none || stat == .finish {
return
}
- guard let missionId = self.missionId as? Int
- else { return }
+ guard let missionId = self.missionId as? Int else { return }
- guard let mission = ServerDataStore.default.masterMission(by: missionId)
- else {
- name = "Unknown"
- DispatchQueue(label: "MissionStatus")
- .asyncAfter(deadline: .now() + 0.33) {
- self.updateState()
- }
- return
+ guard let mission = ServerDataStore.default.masterMission(by: missionId) else {
+
+ name = "Unknown"
+ DispatchQueue(label: "MissionStatus")
+ .asyncAfter(deadline: .now() + 0.33) {
+ self.updateState()
+ }
+ return
}
name = mission.name
return
}
- guard let milliSeconds = milliseconds as? Int
- else {
- name = nil
- time = nil
- return
+ guard let milliSeconds = milliseconds as? Int else {
+
+ name = nil
+ time = nil
+ return
}
let compTime = TimeInterval(Int(milliSeconds / 1_000))
if didNotify { return }
if diff >= 1 * 60 { return }
- guard let fleetName = fleetName
- else { return }
+ guard let fleetName = fleetName else { return }
let notification = NSUserNotification()
let format = NSLocalizedString("%@ Will Return From Mission.", comment: "%@ Will Return From Mission.")
let txtFormat = NSLocalizedString("%@ Will Return From %@.", comment: "%@ Will Return From %@.")
notification.informativeText = String(format: txtFormat, fleetName, name!)
- if UserDefaults.standard.playFinishMissionSound {
+ if UserDefaults.standard[.playFinishMissionSound] {
notification.soundName = NSUserNotificationDefaultSoundName
}