diff options
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/cli/flags.go | 29 | ||||
| -rw-r--r-- | internal/cli/flags_test.go | 3 | ||||
| -rw-r--r-- | internal/processor/processor.go | 28 | ||||
| -rw-r--r-- | internal/processor/processor_test.go | 49 |
4 files changed, 84 insertions, 25 deletions
diff --git a/internal/cli/flags.go b/internal/cli/flags.go index 9c00051..1e18766 100644 --- a/internal/cli/flags.go +++ b/internal/cli/flags.go @@ -8,20 +8,21 @@ const ( // Flags holds all command-line flag values type Flags struct { // General flags - CfgFile string - OutputDir string - AudioFormat string - ImageAPI string - BatchFile string - SkipAudio bool - SkipImages bool - GenerateAnki bool - AnkiCSV bool - DeckName string - ListModels bool - AllVoices bool - NoAutoPlay bool - Archive bool + CfgFile string + OutputDir string + AudioFormat string + ImageAPI string + ImageAPISpecified bool + BatchFile string + SkipAudio bool + SkipImages bool + GenerateAnki bool + AnkiCSV bool + DeckName string + ListModels bool + AllVoices bool + NoAutoPlay bool + Archive bool // OpenAI flags OpenAIModel string diff --git a/internal/cli/flags_test.go b/internal/cli/flags_test.go index d40d8a2..2a63d8d 100644 --- a/internal/cli/flags_test.go +++ b/internal/cli/flags_test.go @@ -16,6 +16,7 @@ func TestNewFlags(t *testing.T) { }{ {"AudioFormat", flags.AudioFormat, "mp3"}, {"ImageAPI", flags.ImageAPI, "openai"}, + {"ImageAPISpecified", flags.ImageAPISpecified, false}, {"DeckName", flags.DeckName, "Bulgarian Vocabulary"}, {"OpenAIModel", flags.OpenAIModel, "gpt-4o-mini-tts"}, {"OpenAISpeed", flags.OpenAISpeed, 0.9}, @@ -84,7 +85,7 @@ func TestFlagsStructure(t *testing.T) { flagsType := reflect.TypeOf(*flags) expectedFields := []string{ - "CfgFile", "OutputDir", "AudioFormat", "ImageAPI", "BatchFile", + "CfgFile", "OutputDir", "AudioFormat", "ImageAPI", "ImageAPISpecified", "BatchFile", "SkipAudio", "SkipImages", "GenerateAnki", "AnkiCSV", "DeckName", "ListModels", "AllVoices", "NoAutoPlay", "OpenAIModel", "OpenAIVoice", "OpenAISpeed", "OpenAIInstruction", diff --git a/internal/processor/processor.go b/internal/processor/processor.go index dd49c2b..935ce60 100644 --- a/internal/processor/processor.go +++ b/internal/processor/processor.go @@ -541,16 +541,7 @@ func (p *Processor) GenerateAnkiFile() (string, error) { // RunGUIMode launches the GUI application func (p *Processor) RunGUIMode() error { - // Create GUI configuration from command line flags and viper config - guiConfig := &gui.Config{ - AudioFormat: p.flags.AudioFormat, - ImageProvider: p.flags.ImageAPI, - OpenAIKey: cli.GetOpenAIKey(), - GoogleAPIKey: cli.GetGoogleAPIKey(), - TranslationProvider: translation.Provider(viper.GetString("translation.provider")), - PhoneticProvider: phonetic.Provider(viper.GetString("phonetic.provider")), - AutoPlay: !p.flags.NoAutoPlay, // Invert the flag (--no-auto-play disables auto-play) - } + guiConfig := p.guiConfigForRunMode() // Only set OutputDir if it was explicitly provided via flag // Check if the outputDir is different from the default @@ -569,6 +560,23 @@ func (p *Processor) RunGUIMode() error { return nil } +func (p *Processor) guiConfigForRunMode() *gui.Config { + imageProvider := p.flags.ImageAPI + if !p.flags.ImageAPISpecified { + imageProvider = gui.DefaultConfig().ImageProvider + } + + return &gui.Config{ + AudioFormat: p.flags.AudioFormat, + ImageProvider: imageProvider, + OpenAIKey: cli.GetOpenAIKey(), + GoogleAPIKey: cli.GetGoogleAPIKey(), + TranslationProvider: translation.Provider(viper.GetString("translation.provider")), + PhoneticProvider: phonetic.Provider(viper.GetString("phonetic.provider")), + AutoPlay: !p.flags.NoAutoPlay, // Invert the flag (--no-auto-play disables auto-play) + } +} + // Helper methods func (p *Processor) findOrCreateWordDirectory(word string) string { diff --git a/internal/processor/processor_test.go b/internal/processor/processor_test.go index ad71263..7ae475a 100644 --- a/internal/processor/processor_test.go +++ b/internal/processor/processor_test.go @@ -6,6 +6,7 @@ import ( "testing" "codeberg.org/snonux/totalrecall/internal/cli" + "codeberg.org/snonux/totalrecall/internal/gui" "codeberg.org/snonux/totalrecall/internal/phonetic" "github.com/spf13/viper" ) @@ -131,6 +132,54 @@ func TestNewProcessor_ExplicitGeminiTranslationProvider(t *testing.T) { } } +func TestGUIConfigForRunModeUsesNanoBananaDefaultWhenImageAPIIsNotSpecified(t *testing.T) { + t.Setenv("OPENAI_API_KEY", "test-openai-key") + t.Setenv("GOOGLE_API_KEY", "test-google-key") + + originalConfig := viper.New() + *originalConfig = *viper.GetViper() + defer func() { + *viper.GetViper() = *originalConfig + }() + viper.Reset() + + flags := cli.NewFlags() + flags.AudioFormat = "wav" + flags.ImageAPI = "openai" + flags.ImageAPISpecified = false + p := NewProcessor(flags) + + guiConfig := p.guiConfigForRunMode() + if guiConfig.ImageProvider != gui.DefaultConfig().ImageProvider { + t.Fatalf("guiConfig.ImageProvider = %q, want GUI default %q", guiConfig.ImageProvider, gui.DefaultConfig().ImageProvider) + } + if guiConfig.AudioFormat != "wav" { + t.Fatalf("guiConfig.AudioFormat = %q, want %q", guiConfig.AudioFormat, "wav") + } +} + +func TestGUIConfigForRunModeHonorsExplicitImageAPI(t *testing.T) { + t.Setenv("OPENAI_API_KEY", "test-openai-key") + t.Setenv("GOOGLE_API_KEY", "test-google-key") + + originalConfig := viper.New() + *originalConfig = *viper.GetViper() + defer func() { + *viper.GetViper() = *originalConfig + }() + viper.Reset() + + flags := cli.NewFlags() + flags.ImageAPI = "openai" + flags.ImageAPISpecified = true + p := NewProcessor(flags) + + guiConfig := p.guiConfigForRunMode() + if guiConfig.ImageProvider != "openai" { + t.Fatalf("guiConfig.ImageProvider = %q, want %q", guiConfig.ImageProvider, "openai") + } +} + func TestProcessSingleWord_InvalidWord(t *testing.T) { flags := cli.NewFlags() flags.OutputDir = t.TempDir() |
