Fix race conditions due to audio device selection in menu bar

This commit is contained in:
Beingpax 2025-12-04 21:24:36 +05:45
parent 2e7112c06a
commit feea0d7f2a
2 changed files with 18 additions and 4 deletions

View File

@ -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

View File

@ -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)