diff options
Diffstat (limited to 'internal/processor')
| -rw-r--r-- | internal/processor/processor.go | 28 | ||||
| -rw-r--r-- | internal/processor/processor_test.go | 49 |
2 files changed, 67 insertions, 10 deletions
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() |
