Added the AI model switcher to the menu bar.

This commit is contained in:
Beingpax 2025-08-26 16:11:56 +05:45
parent 71fdbdfc75
commit 7828afadfe

View File

@ -14,12 +14,37 @@ struct MenuBarView: View {
var body: some View {
VStack {
Button("Toggle Mini Recorder") {
Task {
await whisperState.toggleMiniRecorder()
Menu {
ForEach(whisperState.usableModels, id: \.id) { model in
Button {
Task {
await whisperState.setDefaultTranscriptionModel(model)
}
} label: {
HStack {
Text(model.displayName)
if whisperState.currentTranscriptionModel?.id == model.id {
Image(systemName: "checkmark")
}
}
}
}
Divider()
Button("Manage Models") {
menuBarManager.openMainWindowAndNavigate(to: "AI Models")
}
} label: {
HStack {
Text("Transcription Model: \(whisperState.currentTranscriptionModel?.displayName ?? "None")")
Image(systemName: "chevron.up.chevron.down")
.font(.system(size: 10))
}
}
Divider()
Toggle("AI Enhancement", isOn: $enhancementService.isEnhancementEnabled)
Menu {
@ -78,70 +103,71 @@ struct MenuBarView: View {
.font(.system(size: 10))
}
}
.disabled(!enhancementService.isEnhancementEnabled)
Menu {
ForEach(whisperState.usableModels, id: \.id) { model in
ForEach(aiService.availableModels, id: \.self) { model in
Button {
Task {
await whisperState.setDefaultTranscriptionModel(model)
}
aiService.selectModel(model)
} label: {
HStack {
Text(model.displayName)
if whisperState.currentTranscriptionModel?.id == model.id {
Text(model)
if aiService.currentModel == model {
Image(systemName: "checkmark")
}
}
}
}
if aiService.availableModels.isEmpty {
Text("No models available")
.foregroundColor(.secondary)
}
Divider()
Button("Manage Models") {
menuBarManager.openMainWindowAndNavigate(to: "AI Models")
Button("Manage AI Models") {
menuBarManager.openMainWindowAndNavigate(to: "Enhancement")
}
} label: {
HStack {
Text("Model: \(whisperState.currentTranscriptionModel?.displayName ?? "None")")
Text("AI Model: \(aiService.currentModel)")
Image(systemName: "chevron.up.chevron.down")
.font(.system(size: 10))
}
}
.disabled(!enhancementService.isEnhancementEnabled)
LanguageSelectionView(whisperState: whisperState, displayMode: .menuItem, whisperPrompt: whisperState.whisperPrompt)
Toggle("Use Clipboard Context", isOn: $enhancementService.useClipboardContext)
.disabled(!enhancementService.isEnhancementEnabled)
Toggle("Use Screen Context", isOn: $enhancementService.useScreenCaptureContext)
.disabled(!enhancementService.isEnhancementEnabled)
Menu("Additional") {
Button {
SoundManager.shared.isEnabled.toggle()
enhancementService.useClipboardContext.toggle()
menuRefreshTrigger.toggle()
} label: {
HStack {
Text("Sound Feedback")
Text("Clipboard Context")
Spacer()
if SoundManager.shared.isEnabled {
if enhancementService.useClipboardContext {
Image(systemName: "checkmark")
}
}
}
.disabled(!enhancementService.isEnhancementEnabled)
Button {
MediaController.shared.isSystemMuteEnabled.toggle()
enhancementService.useScreenCaptureContext.toggle()
menuRefreshTrigger.toggle()
} label: {
HStack {
Text("Mute System Audio During Recording")
Text("Context Awareness")
Spacer()
if MediaController.shared.isSystemMuteEnabled {
if enhancementService.useScreenCaptureContext {
Image(systemName: "checkmark")
}
}
}
.disabled(!enhancementService.isEnhancementEnabled)
}
.id("additional-menu-\(menuRefreshTrigger)")