Fix race conditions due to audio device selection in menu bar
This commit is contained in:
parent
2e7112c06a
commit
feea0d7f2a
@ -223,6 +223,22 @@ class AudioDeviceManager: ObservableObject {
|
||||
fallbackToDefaultDevice()
|
||||
}
|
||||
}
|
||||
|
||||
func selectDeviceAndSwitchToCustomMode(id: AudioDeviceID) {
|
||||
if let deviceToSelect = availableDevices.first(where: { $0.id == id }) {
|
||||
let uid = deviceToSelect.uid
|
||||
DispatchQueue.main.async {
|
||||
self.inputMode = .custom
|
||||
self.selectedDeviceID = id
|
||||
UserDefaults.standard.audioInputModeRawValue = AudioInputMode.custom.rawValue
|
||||
UserDefaults.standard.selectedAudioDeviceUID = uid
|
||||
self.notifyDeviceChange()
|
||||
}
|
||||
} else {
|
||||
logger.error("Attempted to select unavailable device: \(id)")
|
||||
fallbackToDefaultDevice()
|
||||
}
|
||||
}
|
||||
|
||||
func selectInputMode(_ mode: AudioInputMode) {
|
||||
inputMode = mode
|
||||
|
||||
@ -10,7 +10,7 @@ struct MenuBarView: View {
|
||||
@EnvironmentObject var aiService: AIService
|
||||
@ObservedObject var audioDeviceManager = AudioDeviceManager.shared
|
||||
@State private var launchAtLoginEnabled = LaunchAtLogin.isEnabled
|
||||
@State private var menuRefreshTrigger = false // Added to force menu updates
|
||||
@State private var menuRefreshTrigger = false
|
||||
@State private var isHovered = false
|
||||
|
||||
var body: some View {
|
||||
@ -129,9 +129,7 @@ struct MenuBarView: View {
|
||||
Menu {
|
||||
ForEach(audioDeviceManager.availableDevices, id: \.id) { device in
|
||||
Button {
|
||||
// Switch to Custom mode and select this device
|
||||
audioDeviceManager.inputMode = .custom
|
||||
audioDeviceManager.selectDevice(id: device.id)
|
||||
audioDeviceManager.selectDeviceAndSwitchToCustomMode(id: device.id)
|
||||
} label: {
|
||||
HStack {
|
||||
Text(device.name)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user