refactor: centralize shortcut recording lifetime
This commit is contained in:
@@ -27,6 +27,13 @@ public final class GlobalShortcuts {
|
||||
public let bindings: [GlobalShortcut]
|
||||
private let defaults: UserDefaults
|
||||
private var isSuspended = false
|
||||
public var isRecording: Bool { isSuspended }
|
||||
|
||||
init(defaults: UserDefaults, bindings: [GlobalShortcut]) {
|
||||
precondition(bindings.count == Self.destinations.count)
|
||||
self.defaults = defaults
|
||||
self.bindings = bindings
|
||||
}
|
||||
|
||||
public init(
|
||||
defaults: UserDefaults = .standard,
|
||||
@@ -60,11 +67,23 @@ public final class GlobalShortcuts {
|
||||
return errors
|
||||
}
|
||||
|
||||
public func suspend() {
|
||||
public func beginRecording() {
|
||||
isSuspended = true
|
||||
bindings.forEach { $0.suspend() }
|
||||
}
|
||||
|
||||
public func cancelRecording() -> [String] {
|
||||
guard isRecording else { return [] }
|
||||
return start()
|
||||
}
|
||||
|
||||
public func finishRecording(_ candidate: KeyboardShortcut?, at index: Int) -> [String] {
|
||||
var errors: [String] = []
|
||||
do { try setShortcut(candidate, at: index) }
|
||||
catch { errors.append(error.localizedDescription) }
|
||||
return errors + cancelRecording()
|
||||
}
|
||||
|
||||
public func stop() {
|
||||
isSuspended = false
|
||||
bindings.forEach { $0.stop() }
|
||||
|
||||
Reference in New Issue
Block a user