2 // TimeSignalNotifier.swift
5 // Created by Hori,Masaki on 2017/01/21.
6 // Copyright © 2017年 Hori,Masaki. All rights reserved.
11 final class TimeSignalNotifier: NSObject {
13 let udController: NSUserDefaultsController = NSUserDefaultsController.shared
20 bind(NSBindingName(#keyPath(notifyTimeBeforeTimeSignal)),
22 withKeyPath: "values.notifyTimeBeforeTimeSignal")
27 unbind(NSBindingName(#keyPath(notifyTimeBeforeTimeSignal)))
30 @objc dynamic var notifyTimeBeforeTimeSignal: Int = 0 {
32 didSet { registerTimer() }
36 @objc func fire(_ timer: Timer) {
38 defer { registerTimer() }
40 guard UserDefaults.standard[.notifyTimeSignal] else { return }
43 let cal = Calendar.current
44 let minutes = cal.component(.minute, from: now)
46 if (59 - minutes) > notifyTimeBeforeTimeSignal { return }
48 let notification = NSUserNotification()
49 let hour = cal.component(.hour, from: now)
50 let format = LocalizedStrings.timerSIgnalMessage.string
51 notification.title = String(format: format, hour + 1)
52 notification.informativeText = notification.title
54 if UserDefaults.standard[.playNotifyTimeSignalSound] {
56 notification.soundName = NSUserNotificationDefaultSoundName
60 NSUserNotificationCenter.default.deliver(notification)
63 private func registerTimer() {
68 let cal = Calendar.current
69 var comp = cal.dateComponents([.year, .month, .day, .hour], from: now)
70 let minutes = cal.component(.minute, from: now)
71 if minutes + notifyTimeBeforeTimeSignal >= 60 {
73 comp.hour = comp.hour.map { $0 + 1 }
76 comp.minute = 60 - notifyTimeBeforeTimeSignal
77 guard let notifyDate = cal.date(from: comp) else {
79 return Logger.shared.log("Can not create notify date")
82 timer = Timer.scheduledTimer(timeInterval: notifyDate.timeIntervalSinceNow,
84 selector: #selector(TimeSignalNotifier.fire(_:)),