86 lines
2.5 KiB
Go
86 lines
2.5 KiB
Go
package tui
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/charmbracelet/huh"
|
|
"github.com/leonardotrapani/hyprvoice/internal/config"
|
|
"github.com/leonardotrapani/hyprvoice/internal/language"
|
|
"github.com/leonardotrapani/hyprvoice/internal/provider"
|
|
)
|
|
|
|
// editLanguage allows the user to select the global transcription language
|
|
func editLanguage(cfg *config.Config) error {
|
|
// no model-specific warnings for global language selection
|
|
languageOptions := getLanguageOptions(nil, cfg.General.Language)
|
|
|
|
selectedLanguage := cfg.General.Language
|
|
|
|
form := huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewSelect[string]().
|
|
Title("Language").
|
|
Description("Select language for transcription (applies globally)").
|
|
Options(languageOptions...).
|
|
Filtering(true).
|
|
Value(&selectedLanguage),
|
|
),
|
|
).WithTheme(getTheme())
|
|
|
|
if err := form.Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
// check if current transcription model supports the selected language
|
|
if selectedLanguage != "" && cfg.Transcription.Provider != "" && cfg.Transcription.Model != "" {
|
|
registryName := mapConfigProviderToRegistry(cfg.Transcription.Provider)
|
|
model, err := provider.GetModel(registryName, cfg.Transcription.Model)
|
|
if err == nil && !model.SupportsLanguage(selectedLanguage) {
|
|
langName := language.FromCode(selectedLanguage).Name
|
|
if langName == "" {
|
|
langName = selectedLanguage
|
|
}
|
|
|
|
fmt.Println()
|
|
fmt.Println(StyleWarning.Render("Language-Model Compatibility Warning"))
|
|
fmt.Printf("Your current model '%s' does not support %s.\n", model.Name, langName)
|
|
fmt.Println()
|
|
fmt.Println(StyleMuted.Render("You can:"))
|
|
fmt.Println(StyleMuted.Render(" - Keep this language and change the model later"))
|
|
fmt.Println(StyleMuted.Render(" - Use 'Auto-detect' for language"))
|
|
fmt.Println(StyleMuted.Render(" - Choose a different language"))
|
|
fmt.Println()
|
|
|
|
var action string
|
|
actionForm := huh.NewForm(
|
|
huh.NewGroup(
|
|
huh.NewSelect[string]().
|
|
Title("What would you like to do?").
|
|
Options(
|
|
huh.NewOption("Keep this language (change model later)", "keep"),
|
|
huh.NewOption("Use Auto-detect instead", "auto"),
|
|
huh.NewOption("Choose a different language", "retry"),
|
|
).
|
|
Value(&action),
|
|
),
|
|
).WithTheme(getTheme())
|
|
|
|
if err := actionForm.Run(); err != nil {
|
|
return err
|
|
}
|
|
|
|
switch action {
|
|
case "auto":
|
|
selectedLanguage = ""
|
|
case "retry":
|
|
return editLanguage(cfg)
|
|
case "keep":
|
|
// proceed with incompatible language
|
|
}
|
|
}
|
|
}
|
|
|
|
cfg.General.Language = selectedLanguage
|
|
return nil
|
|
}
|