summaryrefslogtreecommitdiff
path: root/internal/gui/generator.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-03 08:03:05 +0300
committerPaul Buetow <paul@buetow.org>2026-04-03 08:03:05 +0300
commit63bd86d8046949e80e5b1122a1fcf717f51915c6 (patch)
tree10bc72c97d1ba597bc82fb273987716eabf2e989 /internal/gui/generator.go
parent5a1a6b863c3adaa8ec9d087ba130f7676fc9575b (diff)
tasks 00d, 006, 007: move test seams to struct fields, centralize Viper config, extract shared card-dir logic
task 00d: remove package-level var test seams from processor and gui packages; factory functions (newAudioProvider, newOpenAIImageClient, newNanoBananaImageClient) are now struct fields on Processor and Application, initialized with production defaults in constructors and replaced in tests without global mutation. task 006: add viperConfig struct captured once in NewProcessor; no method body calls viper.GetString/IsSet/GetFloat64 directly any more — all config-file values are accessed via p.viperCfg fields. task 007: extract FindCardDirectory and FindOrCreateCardDirectory into internal/utils.go; both Processor.findCardDirectory and Application.findCardDirectory now delegate to the shared implementation, which also handles the legacy _word.txt backward-compat fallback. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/gui/generator.go')
-rw-r--r--internal/gui/generator.go16
1 files changed, 3 insertions, 13 deletions
diff --git a/internal/gui/generator.go b/internal/gui/generator.go
index 4763149..4b55608 100644
--- a/internal/gui/generator.go
+++ b/internal/gui/generator.go
@@ -22,16 +22,6 @@ type promptAwareImageClient interface {
SetPromptCallback(func(prompt string))
}
-var newOpenAIImageClient = func(config *image.OpenAIConfig) promptAwareImageClient {
- return image.NewOpenAIClient(config)
-}
-
-var newNanoBananaImageClient = func(config *image.NanoBananaConfig) promptAwareImageClient {
- return image.NewNanoBananaClient(config)
-}
-
-var newAudioProvider = audio.NewProvider
-
func randomVoice(voices []string) string {
rng := rand.New(rand.NewSource(time.Now().UnixNano()))
return voices[rng.Intn(len(voices))]
@@ -123,7 +113,7 @@ func (a *Application) audioConfigForGeneration(voice string, speed float64) audi
func (a *Application) generateAudioFile(ctx context.Context, text, outputFile, voice string, speed float64) error {
audioConfig := a.audioConfigForGeneration(voice, speed)
- provider, err := newAudioProvider(&audioConfig)
+ provider, err := a.newAudioProvider(&audioConfig)
if err != nil {
return err
}
@@ -410,7 +400,7 @@ func (a *Application) newImageSearcher() (promptAwareImageClient, error) {
Style: "natural",
}
- return newOpenAIImageClient(openaiConfig), nil
+ return a.newOpenAIImageClient(openaiConfig), nil
case imageProviderNanoBanana:
config := a.config
if config == nil {
@@ -426,7 +416,7 @@ func (a *Application) newImageSearcher() (promptAwareImageClient, error) {
TextModel: config.NanoBananaTextModel,
}
- return newNanoBananaImageClient(nanoBananaConfig), nil
+ return a.newNanoBananaImageClient(nanoBananaConfig), nil
default:
return nil, fmt.Errorf("unknown image provider: %s", a.config.ImageProvider)
}