Add audio input device selection option in menu bar
This commit is contained in:
parent
8ce84e9a69
commit
1ab91ad4ef
@ -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()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user