Add audio input device selection option in menu bar

This commit is contained in:
Beingpax 2025-12-04 21:12:30 +05:45
parent 8ce84e9a69
commit 1ab91ad4ef

View File

@ -8,6 +8,7 @@ struct MenuBarView: View {
@EnvironmentObject var updaterViewModel: UpdaterViewModel @EnvironmentObject var updaterViewModel: UpdaterViewModel
@EnvironmentObject var enhancementService: AIEnhancementService @EnvironmentObject var enhancementService: AIEnhancementService
@EnvironmentObject var aiService: AIService @EnvironmentObject var aiService: AIService
@ObservedObject var audioDeviceManager = AudioDeviceManager.shared
@State private var launchAtLoginEnabled = LaunchAtLogin.isEnabled @State private var launchAtLoginEnabled = LaunchAtLogin.isEnabled
@State private var menuRefreshTrigger = false // Added to force menu updates @State private var menuRefreshTrigger = false // Added to force menu updates
@State private var isHovered = false @State private var isHovered = false
@ -70,7 +71,6 @@ struct MenuBarView: View {
.font(.system(size: 10)) .font(.system(size: 10))
} }
} }
.disabled(!enhancementService.isEnhancementEnabled)
Menu { Menu {
ForEach(aiService.connectedProviders, id: \.self) { provider in ForEach(aiService.connectedProviders, id: \.self) { provider in
@ -85,17 +85,11 @@ struct MenuBarView: View {
} }
} }
} }
if aiService.connectedProviders.isEmpty { if aiService.connectedProviders.isEmpty {
Text("No providers connected") Text("No providers connected")
.foregroundColor(.secondary) .foregroundColor(.secondary)
} }
Divider()
Button("Manage AI Providers") {
menuBarManager.openMainWindowAndNavigate(to: "Enhancement")
}
} label: { } label: {
HStack { HStack {
Text("AI Provider: \(aiService.selectedProvider.rawValue)") Text("AI Provider: \(aiService.selectedProvider.rawValue)")
@ -103,7 +97,6 @@ struct MenuBarView: View {
.font(.system(size: 10)) .font(.system(size: 10))
} }
} }
.disabled(!enhancementService.isEnhancementEnabled)
Menu { Menu {
ForEach(aiService.availableModels, id: \.self) { model in ForEach(aiService.availableModels, id: \.self) { model in
@ -118,17 +111,11 @@ struct MenuBarView: View {
} }
} }
} }
if aiService.availableModels.isEmpty { if aiService.availableModels.isEmpty {
Text("No models available") Text("No models available")
.foregroundColor(.secondary) .foregroundColor(.secondary)
} }
Divider()
Button("Manage AI Models") {
menuBarManager.openMainWindowAndNavigate(to: "Enhancement")
}
} label: { } label: {
HStack { HStack {
Text("AI Model: \(aiService.currentModel)") Text("AI Model: \(aiService.currentModel)")
@ -136,10 +123,37 @@ struct MenuBarView: View {
.font(.system(size: 10)) .font(.system(size: 10))
} }
} }
.disabled(!enhancementService.isEnhancementEnabled)
LanguageSelectionView(whisperState: whisperState, displayMode: .menuItem, whisperPrompt: whisperState.whisperPrompt) LanguageSelectionView(whisperState: whisperState, displayMode: .menuItem, whisperPrompt: whisperState.whisperPrompt)
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)
} label: {
HStack {
Text(device.name)
if audioDeviceManager.getCurrentDevice() == device.id {
Image(systemName: "checkmark")
}
}
}
}
if audioDeviceManager.availableDevices.isEmpty {
Text("No devices available")
.foregroundColor(.secondary)
}
} label: {
HStack {
Text("Audio Input")
Image(systemName: "chevron.up.chevron.down")
.font(.system(size: 10))
}
}
Menu("Additional") { Menu("Additional") {
Button { Button {
enhancementService.useClipboardContext.toggle() enhancementService.useClipboardContext.toggle()