summaryrefslogtreecommitdiff
path: root/internal/gui
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-04-02 22:03:06 +0300
committerPaul Buetow <paul@buetow.org>2026-04-02 22:03:06 +0300
commit730152379886f1a7dd7c36d68918706c82ad718d (patch)
treeb815da0bab529f1304d9f225cbd5a145535a7f06 /internal/gui
parent74383d0e31fee5aebec002971ebd2cbddad32ac7 (diff)
task 00e: inject phonetic.Fetcher and translation.Translator into gui.New()
Add PhoneticFetcher and Translator fields to gui.Config so callers can inject ready-to-use instances. gui.New() uses the injected values when non-nil and falls back to constructing from provider/key fields otherwise. The processor composition root now builds both dependencies and sets them on gui.Config, keeping construction logic out of gui.New(). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/gui')
-rw-r--r--internal/gui/app.go29
1 files changed, 23 insertions, 6 deletions
diff --git a/internal/gui/app.go b/internal/gui/app.go
index f9d941d..666c763 100644
--- a/internal/gui/app.go
+++ b/internal/gui/app.go
@@ -127,6 +127,11 @@ type Config struct {
TranslationProvider translation.Provider
PhoneticProvider phonetic.Provider
AutoPlay bool // Whether to automatically play audio when generated or navigated to
+
+ // Injectable dependencies — when non-nil, New() uses them directly instead of
+ // constructing new instances from the provider/key fields above.
+ PhoneticFetcher *phonetic.Fetcher
+ Translator *translation.Translator
}
const (
@@ -221,12 +226,24 @@ func New(config *Config) *Application {
// Set up audio configuration
app.audioConfig = audioConfigForApp(config)
- app.phoneticFetcher = phonetic.NewFetcher(&phonetic.Config{
- Provider: config.PhoneticProvider,
- OpenAIKey: config.OpenAIKey,
- GoogleAPIKey: config.GoogleAPIKey,
- })
- app.translator = translation.NewTranslator(translationConfigForApp(config))
+
+ // Use injected phonetic fetcher when provided; otherwise construct from config fields.
+ if config.PhoneticFetcher != nil {
+ app.phoneticFetcher = config.PhoneticFetcher
+ } else {
+ app.phoneticFetcher = phonetic.NewFetcher(&phonetic.Config{
+ Provider: config.PhoneticProvider,
+ OpenAIKey: config.OpenAIKey,
+ GoogleAPIKey: config.GoogleAPIKey,
+ })
+ }
+
+ // Use injected translator when provided; otherwise construct from config fields.
+ if config.Translator != nil {
+ app.translator = config.Translator
+ } else {
+ app.translator = translation.NewTranslator(translationConfigForApp(config))
+ }
app.setupUI()