Skip to content

Commit eb630a4

Browse files
committed
🎨 improve code structure
1 parent f9ba65c commit eb630a4

File tree

2 files changed

+34
-16
lines changed

2 files changed

+34
-16
lines changed

Sources/AudioInput.swift

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,40 @@
11
import Foundation
2+
import CoreAudio
3+
import Cocoa
24

35
public extension Notification.Name {
46
static let deviceIsRunningSomewhereDidChange = Self("deviceIsRunningSomewhereDidChange")
57
}
68

7-
89
final class AudioInput {
9-
private var devices: Set<AudioDevice>
1010
private var callback: (Bool) -> Void
11+
private var devices: Set<AudioDevice> {
12+
didSet {
13+
let added = devices.subtracting(oldValue)
14+
added.forEach { device in
15+
try? device.whenSelectorChanges(.isRunningSomewhere) { _ in
16+
NotificationCenter.default.post(name: .deviceIsRunningSomewhereDidChange, object: nil)
17+
}
18+
}
19+
}
20+
}
1121

1222
init(_ callback: @escaping (Bool) -> Void) {
1323
self.devices = Set()
1424
self.callback = callback
1525
}
1626

1727
private func updateDeviceList() {
18-
let input = try? AudioDevice.devices().filter({ try $0.supportsInput() })
19-
guard let input else { return }
20-
let inputs = Set(input)
21-
if (self.devices == inputs) { return }
22-
23-
let added = inputs.subtracting(self.devices)
24-
added.forEach { device in
25-
try? device.whenSelectorChanges(.isRunningSomewhere) { _ in
26-
NotificationCenter.default.post(name: .deviceIsRunningSomewhereDidChange, object: nil)
27-
}
28-
}
28+
let devices = AudioDevice.inputDevices()
29+
guard let devices else { return }
30+
guard devices != self.devices else { return }
2931

30-
self.devices = inputs
32+
self.devices = devices
3133
}
3234

3335
private lazy var listener = Debouncer(delay: 0.5) { [weak self] in
3436
guard let self else { return }
35-
let isRunningSomewhere = try? self.devices.contains { try $0.isRunningSomewhere() }
36-
self.callback(isRunningSomewhere ?? false)
37+
self.callback(self.devices.isRunningSomewhere() ?? false)
3738
}
3839

3940
func startListener() {

Sources/SFBAudioEngine/AudioDevice.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,3 +99,20 @@ extension AudioObjectSelector where T == AudioDevice {
9999
/// The property selector `kAudioDevicePropertyDeviceIsRunningSomewhere`
100100
public static let isRunningSomewhere = AudioObjectSelector(kAudioDevicePropertyDeviceIsRunningSomewhere)
101101
}
102+
103+
// MARK: - BeezyLight Extensions
104+
105+
extension AudioDevice {
106+
public class func inputDevices() -> Set<AudioDevice>? {
107+
let devices = try? AudioDevice.devices()
108+
let inputs = try? devices?.filter { try $0.supportsInput() }
109+
guard let inputs else { return nil }
110+
return Set(inputs)
111+
}
112+
}
113+
114+
extension Set where Element == AudioDevice {
115+
func isRunningSomewhere() -> Bool? {
116+
return try? self.contains { try $0.isRunningSomewhere() }
117+
}
118+
}

0 commit comments

Comments
 (0)