Skip to content

Commit dbf0645

Browse files
authored
Merge pull request #24 from HsiangHo/develop
Develop
2 parents d88d7f9 + 6961e23 commit dbf0645

7 files changed

Lines changed: 294 additions & 245 deletions

File tree

Kaka/Kaka/HAFConfigureManager.swift

Lines changed: 25 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,13 @@ class HAFConfigureManager: NSObject {
2424
let kAutoToggleDarkModeBaseOnDisplayBrightnessValue = "AutoToggleDarkModeBaseOnDisplayBrightnessValueKey"
2525
let kEnableFinderExtension = "EnableFinderExtensionKey"
2626
let kEnableKaka = "EnableKakaKey"
27-
let kDisplayDesktopKeyCombo = "DisplayDesktopKeyCombo"
28-
let kHideDesktopIconsKeyCombo = "HideDesktopIconsKeyCombo"
29-
let kTurnOffDisplayKeyCombo = "TurnOffDisplayKeyCombo"
30-
let kTurnOnDarkModeKeyCombo = "TurnOnDarkModeKeyCombo"
3127
let kRequestRating = "RequestRating"
3228
let kAutoHideDesktopIconTimeOut = "AutoHideDesktopIconTimeOut"
3329
let kAutoHideCursorTimeOut = "AutoHideCursorTimeOut"
3430
let kDeactivateCriticalBatteryCharge = "DeactivateCriticalBatteryCharge"
3531
let kDeactivateCriticalBatteryChargeThreshold = "DeactivateCriticalBatteryChargeThreshold"
32+
let kInifiteLoopStatus = "InifiteLoopStatus"
33+
let kUserdDefinedHotkeyPaths = "UserdDefinedHotkeyPaths"
3634

3735
func setLaunchAtLogin(bFlag: Bool) -> Void {
3836
SMLoginItemSetEnabled(helperBundleIdentifier as CFString, bFlag)
@@ -129,45 +127,14 @@ class HAFConfigureManager: NSObject {
129127
return !UserDefaults.standard.bool(forKey: kEnableKaka)
130128
}
131129

132-
func setDisplayDesktopKeyCombo(keyCombo: SCKeyCombo?) -> Void{
133-
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: keyCombo as Any), forKey: kDisplayDesktopKeyCombo)
130+
func setKeyComboWithIdentifier(keyCombo: SCKeyCombo?, identifier: String) -> Void{
131+
let id = identifier + "KeyCombo"
132+
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: keyCombo as Any), forKey: id)
134133
}
135-
136-
func displayDesktopKeyCombo() -> SCKeyCombo?{
137-
guard let data = UserDefaults.standard.object(forKey: kDisplayDesktopKeyCombo) else {
138-
return nil;
139-
}
140-
return NSKeyedUnarchiver.unarchiveObject(with: data as! Data) as? SCKeyCombo
141-
}
142-
143-
func setHideDesktopIconsKeyCombo(keyCombo: SCKeyCombo?) -> Void{
144-
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: keyCombo as Any), forKey: kHideDesktopIconsKeyCombo)
145-
}
146-
147-
func hideDesktopIconsKeyCombo() -> SCKeyCombo?{
148-
guard let data = UserDefaults.standard.object(forKey: kHideDesktopIconsKeyCombo) else {
149-
return nil;
150-
}
151-
return NSKeyedUnarchiver.unarchiveObject(with: data as! Data) as? SCKeyCombo
152-
}
153-
154-
func setTurnOffDisplayKeyCombo(keyCombo: SCKeyCombo?) -> Void{
155-
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: keyCombo as Any), forKey: kTurnOffDisplayKeyCombo)
156-
}
157-
158-
func turnOffDisplayKeyCombo() -> SCKeyCombo?{
159-
guard let data = UserDefaults.standard.object(forKey: kTurnOffDisplayKeyCombo) else {
160-
return nil;
161-
}
162-
return NSKeyedUnarchiver.unarchiveObject(with: data as! Data) as? SCKeyCombo
163-
}
164-
165-
func setTurnOnDarkModeKeyCombo(keyCombo: SCKeyCombo?) -> Void{
166-
UserDefaults.standard.set(NSKeyedArchiver.archivedData(withRootObject: keyCombo as Any), forKey: kTurnOnDarkModeKeyCombo)
167-
}
168-
169-
func turnOnDarkModeKeyCombo() -> SCKeyCombo?{
170-
guard let data = UserDefaults.standard.object(forKey: kTurnOnDarkModeKeyCombo) else {
134+
135+
func keyComboWithIdentifier(identifier: String) -> SCKeyCombo?{
136+
let id = identifier + "KeyCombo"
137+
guard let data = UserDefaults.standard.object(forKey: id) else {
171138
return nil;
172139
}
173140
return NSKeyedUnarchiver.unarchiveObject(with: data as! Data) as? SCKeyCombo
@@ -227,4 +194,20 @@ class HAFConfigureManager: NSObject {
227194
return value as! Float
228195
}
229196
}
197+
198+
func setInifiteLoopStatus(bFlag: Bool) -> Void {
199+
UserDefaults.standard.set(bFlag, forKey: kInifiteLoopStatus)
200+
}
201+
202+
func inifiteLoopStatus() -> Bool {
203+
return UserDefaults.standard.bool(forKey: kInifiteLoopStatus)
204+
}
205+
206+
func userDefinedHotkeyPaths() -> Array<String>? {
207+
return UserDefaults.standard.stringArray(forKey: kUserdDefinedHotkeyPaths)
208+
}
209+
210+
func setUserDefinedHotkeyPaths(array: Array<String>) -> Void {
211+
UserDefaults.standard.set(array, forKey: kUserdDefinedHotkeyPaths)
212+
}
230213
}

Kaka/Kaka/HAFHotkeyManager.swift

Lines changed: 125 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -10,94 +10,156 @@ import Cocoa
1010
import ShortcutsKit
1111
import ShadowstarKit
1212

13+
struct HotkeyIdentifiers {
14+
static let displayDesktop = "displayDesktop"
15+
static let hideDesktopIcons = "hideDesktopIcons"
16+
static let turnOffDisplay = "turnOffDisplay"
17+
static let turnOnDarkMode = "turnOnDarkMode"
18+
static let sleepMac = "sleepMac"
19+
static let enterScreensaver = "enterScreensaver"
20+
static let preventSleep = "enterScreensaver"
21+
static let disableMouseCursor = "disableMouseCursor"
22+
}
23+
1324
class HAFHotkeyManager: NSObject {
1425
static let sharedManager = HAFHotkeyManager()
1526

27+
var preDefinedHotkeys: Array<(String, SCHotkey)> = Array.init()
28+
var userDefinedHotkeys: Array<(String, SCHotkey)> = Array.init()
1629
private var displayDesktopHotkey: SCHotkey?
1730
private var hideDesktopIconsHotkey: SCHotkey?
1831
private var turnOffDisplayHotkey: SCHotkey?
1932
private var turnOnDarkModeHotkey: SCHotkey?
33+
private var sleepMacHotkey: SCHotkey?
34+
private var enterScreensaverHotkey: SCHotkey?
35+
private var preventSleepHotkey: SCHotkey?
36+
private var disableMouseCursorHotkey: SCHotkey?
2037

21-
func registerAll() -> Void {
22-
setDisplayDesktopHotkey(keyCombo: HAFConfigureManager.sharedManager.displayDesktopKeyCombo())
23-
setHideDesktopIconsHotkey(keyCombo: HAFConfigureManager.sharedManager.hideDesktopIconsKeyCombo())
24-
setTurnOffDisplayHotkey(keyCombo: HAFConfigureManager.sharedManager.turnOffDisplayKeyCombo())
25-
setTurnOnDarkModeHotkey(keyCombo: HAFConfigureManager.sharedManager.turnOnDarkModeKeyCombo())
38+
override init() {
39+
super.init()
40+
__initializePredefinedHotkeys()
41+
__initializeUserDefinedHotkeys()
2642
}
2743

28-
func unregisterAll() -> Void {
29-
if nil != displayDesktopHotkey{
30-
displayDesktopHotkey!.unregister()
31-
}
32-
if nil != hideDesktopIconsHotkey{
33-
hideDesktopIconsHotkey!.unregister()
34-
}
35-
if nil != turnOffDisplayHotkey{
36-
turnOffDisplayHotkey!.unregister()
37-
}
38-
if nil != turnOnDarkModeHotkey{
39-
turnOnDarkModeHotkey!.unregister()
44+
func hotkeyForIdentifier(identifier: String!) -> SCHotkey? {
45+
var hotkey: SCHotkey? = nil
46+
for k in preDefinedHotkeys {
47+
if k.1.identifier == identifier{
48+
hotkey = k.1
49+
break
50+
}
4051
}
52+
return hotkey
4153
}
4254

43-
//Display desktop hotkey
44-
func setDisplayDesktopHotkey(keyCombo: SCKeyCombo?) -> Void {
45-
if nil != displayDesktopHotkey{
46-
displayDesktopHotkey!.unregister()
47-
}
48-
if nil != keyCombo {
49-
displayDesktopHotkey = SCHotkey.init(keyCombo: keyCombo!, identifier: "displayDesktop", handler: { (_) in
50-
SSDesktopManager.shared().showDesktop(false)
51-
});
52-
displayDesktopHotkey!.register()
55+
func addHotkeyForPath(path: String!) -> SCHotkey? {
56+
var array = HAFConfigureManager.sharedManager.userDefinedHotkeyPaths()
57+
if nil == array {
58+
array = Array<String>.init()
5359
}
54-
HAFConfigureManager.sharedManager.setDisplayDesktopKeyCombo(keyCombo: keyCombo)
55-
}
56-
57-
//Hide desktop icons hotkey
58-
func setHideDesktopIconsHotkey(keyCombo: SCKeyCombo?) -> Void {
59-
if nil != hideDesktopIconsHotkey{
60-
hideDesktopIconsHotkey!.unregister()
60+
if !array!.contains(path){
61+
array!.append(path)
6162
}
62-
if nil != keyCombo {
63-
hideDesktopIconsHotkey = SCHotkey.init(keyCombo: keyCombo!, identifier: "hideDesktopIcons", handler: { (_) in
64-
if SSDesktopManager.shared().isAllDesktopCovered(){
65-
SSDesktopManager.shared().uncoverAllDesktop()
63+
HAFConfigureManager.sharedManager.setUserDefinedHotkeyPaths(array: array!)
64+
var hotkey = userDefinedHotkeys.first { (str, k) -> Bool in
65+
return str == path
66+
}?.1
67+
if nil == hotkey{
68+
hotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: path), identifier: path, handler: { (k) in
69+
let p: String! = k?.identifier
70+
if p.lowercased().hasSuffix(".app"){
71+
NSWorkspace.shared.launchApplication(p)
6672
}else{
67-
SSDesktopManager.shared().setupAllDesktopWithDesktopBackgroundImage()
68-
SSDesktopManager.shared().coverAllDesktop()
73+
NSWorkspace.shared.openFile(p)
6974
}
70-
});
71-
hideDesktopIconsHotkey!.register()
75+
})
76+
userDefinedHotkeys.append((path, hotkey!))
7277
}
73-
HAFConfigureManager.sharedManager.setHideDesktopIconsKeyCombo(keyCombo: keyCombo)
78+
return hotkey
7479
}
7580

76-
//Turn off display hotkey
77-
func setTurnOffDisplayHotkey(keyCombo: SCKeyCombo?) -> Void {
78-
if nil != turnOffDisplayHotkey{
79-
turnOffDisplayHotkey!.unregister()
81+
func removeHotkeyForPath(path: String!) -> Void {
82+
var array = HAFConfigureManager.sharedManager.userDefinedHotkeyPaths()
83+
if nil == array {
84+
return
85+
}
86+
if !array!.contains(path){
87+
return
8088
}
81-
if nil != keyCombo {
82-
turnOffDisplayHotkey = SCHotkey.init(keyCombo: keyCombo!, identifier: "turnOffDisplay", handler: { (_) in
83-
SSEnergyManager.shared().displaySleep()
84-
});
85-
turnOffDisplayHotkey!.register()
89+
if let index = array!.index(of: path) {
90+
array!.remove(at: index)
91+
}
92+
HAFConfigureManager.sharedManager.setUserDefinedHotkeyPaths(array: array!)
93+
userDefinedHotkeys.removeAll { (str, k) -> Bool in
94+
return str == path
8695
}
87-
HAFConfigureManager.sharedManager.setTurnOffDisplayKeyCombo(keyCombo: keyCombo)
8896
}
8997

90-
//Turn on dark mode hotkey
91-
func setTurnOnDarkModeHotkey(keyCombo: SCKeyCombo?) -> Void {
92-
if nil != turnOnDarkModeHotkey{
93-
turnOnDarkModeHotkey!.unregister()
98+
func __initializeUserDefinedHotkeys() -> Void {
99+
guard let userDefinedPaths = HAFConfigureManager.sharedManager.userDefinedHotkeyPaths() else {
100+
return
94101
}
95-
if nil != keyCombo {
96-
turnOnDarkModeHotkey = SCHotkey.init(keyCombo: keyCombo!, identifier: "turnOnDarkMode", handler: { (_) in
97-
SSAppearanceManager.shared().toggle()
98-
});
99-
turnOnDarkModeHotkey!.register()
102+
userDefinedHotkeys = userDefinedPaths.map { path in
103+
let hotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: path), identifier: path, handler: { (k) in
104+
let p: String! = k?.identifier
105+
if p.lowercased().hasSuffix(".app"){
106+
NSWorkspace.shared.launchApplication(p)
107+
}else{
108+
NSWorkspace.shared.openFile(p)
109+
}
110+
})
111+
return (path, hotkey!)
100112
}
101-
HAFConfigureManager.sharedManager.setTurnOnDarkModeKeyCombo(keyCombo: keyCombo)
113+
}
114+
115+
func __initializePredefinedHotkeys() -> Void {
116+
displayDesktopHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.displayDesktop), identifier: HotkeyIdentifiers.displayDesktop, handler: { (_) in
117+
SSDesktopManager.shared().showDesktop(false)
118+
})
119+
preDefinedHotkeys.append((NSLocalizedString("Display Desktop", comment: ""), displayDesktopHotkey!))
120+
121+
hideDesktopIconsHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.hideDesktopIcons), identifier: HotkeyIdentifiers.hideDesktopIcons, handler: { (_) in
122+
if SSDesktopManager.shared().isAllDesktopCovered(){
123+
SSDesktopManager.shared().uncoverAllDesktop()
124+
}else{
125+
SSDesktopManager.shared().setupAllDesktopWithDesktopBackgroundImage()
126+
SSDesktopManager.shared().coverAllDesktop()
127+
}
128+
})
129+
preDefinedHotkeys.append((NSLocalizedString("Hide Desktop Icons", comment: ""), hideDesktopIconsHotkey!))
130+
131+
turnOffDisplayHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.turnOffDisplay), identifier: HotkeyIdentifiers.turnOffDisplay, handler: { (_) in
132+
SSEnergyManager.shared().displaySleep()
133+
})
134+
preDefinedHotkeys.append((NSLocalizedString("Turn Off The Display", comment: ""), turnOffDisplayHotkey!))
135+
136+
turnOnDarkModeHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.turnOnDarkMode), identifier: HotkeyIdentifiers.turnOnDarkMode, handler: { (_) in
137+
SSAppearanceManager.shared().toggle()
138+
})
139+
preDefinedHotkeys.append((NSLocalizedString("Turn On Dark Mode", comment: ""), turnOnDarkModeHotkey!))
140+
141+
sleepMacHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.sleepMac), identifier: HotkeyIdentifiers.sleepMac, handler: { (_) in
142+
SSEnergyManager.shared().sleep()
143+
})
144+
preDefinedHotkeys.append((NSLocalizedString("Sleep Mac", comment: ""), sleepMacHotkey!))
145+
146+
enterScreensaverHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.enterScreensaver), identifier: HotkeyIdentifiers.enterScreensaver, handler: { (_) in
147+
SSEnergyManager.shared().screenSaver()
148+
})
149+
preDefinedHotkeys.append((NSLocalizedString("Enter Screensaver", comment: ""), enterScreensaverHotkey!))
150+
151+
preventSleepHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.preventSleep), identifier: HotkeyIdentifiers.preventSleep, handler: { (_) in
152+
SSEnergyManager.shared().preventSleep(!SSEnergyManager.shared().isPreventSleepRunning())
153+
})
154+
preDefinedHotkeys.append((NSLocalizedString("Prevent Sleep", comment: ""), preventSleepHotkey!))
155+
156+
disableMouseCursorHotkey = SCHotkey.init(keyCombo: HAFConfigureManager.sharedManager.keyComboWithIdentifier(identifier: HotkeyIdentifiers.disableMouseCursor), identifier: HotkeyIdentifiers.disableMouseCursor, handler: { (_) in
157+
if SSCursorManager.shared().isCursorEnable(){
158+
SSCursorManager.shared().disableCursor()
159+
}else{
160+
SSCursorManager.shared().enableCursor()
161+
}
162+
})
163+
preDefinedHotkeys.append((NSLocalizedString("Disable Mouse Cursor", comment: ""), disableMouseCursorHotkey!))
102164
}
103165
}

0 commit comments

Comments
 (0)