diff options
| author | Paul Buetow <paul@buetow.org> | 2026-04-02 07:45:23 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-04-02 07:45:23 +0300 |
| commit | 0f2b16d1ccf461b706dd426727ed188c4ea3b60a (patch) | |
| tree | 5f02fc3c9c543c2ae8191814e6652155b7afd0c5 | |
| parent | f623b64d083d52cc9a278e9d229215a6686c6b29 (diff) | |
Fix GUI selector sync and audio metadata model
| -rw-r--r-- | internal/gui/app.go | 20 | ||||
| -rw-r--r-- | internal/gui/audio_paths_test.go | 3 | ||||
| -rw-r--r-- | internal/gui/generator.go | 17 | ||||
| -rw-r--r-- | internal/gui/generator_test.go | 13 | ||||
| -rw-r--r-- | internal/gui/navigation.go | 12 |
5 files changed, 52 insertions, 13 deletions
diff --git a/internal/gui/app.go b/internal/gui/app.go index a5924fc..7c9ecd7 100644 --- a/internal/gui/app.go +++ b/internal/gui/app.go @@ -1879,6 +1879,26 @@ func (a *Application) setActionButtonsEnabled(enabled bool) { } } +func (a *Application) syncCardTypeSelection(cardType internal.CardType) { + if a.cardTypeSelect == nil { + return + } + + selected := "English → Bulgarian" + if cardType.IsBgBg() { + selected = "Bulgarian → Bulgarian" + } + + if a.window == nil { + a.cardTypeSelect.SetSelected(selected) + return + } + + fyne.Do(func() { + a.cardTypeSelect.SetSelected(selected) + }) +} + func (a *Application) showProgress(message string) { // Check if we're already processing something a.mu.Lock() diff --git a/internal/gui/audio_paths_test.go b/internal/gui/audio_paths_test.go index d412004..cf9046c 100644 --- a/internal/gui/audio_paths_test.go +++ b/internal/gui/audio_paths_test.go @@ -173,6 +173,9 @@ func TestCompletedBgBgJobKeepsBackAudioForSessionNavigation(t *testing.T) { if app.currentCardType != "bg-bg" { t.Fatalf("currentCardType = %q, want %q", app.currentCardType, "bg-bg") } + if got := app.cardTypeSelect.Selected; got != "Bulgarian → Bulgarian" { + t.Fatalf("cardTypeSelect.Selected = %q, want %q", got, "Bulgarian → Bulgarian") + } } func TestResolveBgBgAudioFilesFindLegacyMp3Files(t *testing.T) { diff --git a/internal/gui/generator.go b/internal/gui/generator.go index f409216..704020d 100644 --- a/internal/gui/generator.go +++ b/internal/gui/generator.go @@ -473,10 +473,19 @@ func (a *Application) saveAudioMetadata(cardDir string, audioConfig audio.Config metadata := strings.Builder{} fmt.Fprintf(&metadata, "provider=%s\n", audioConfig.Provider) - if strings.TrimSpace(audioConfig.GeminiTTSModel) != "" { - fmt.Fprintf(&metadata, "model=%s\n", audioConfig.GeminiTTSModel) - } else if strings.TrimSpace(audioConfig.OpenAIModel) != "" { - fmt.Fprintf(&metadata, "model=%s\n", audioConfig.OpenAIModel) + switch strings.ToLower(strings.TrimSpace(audioConfig.Provider)) { + case "gemini": + model := strings.TrimSpace(audioConfig.GeminiTTSModel) + if model == "" { + model = audio.DefaultProviderConfig().GeminiTTSModel + } + fmt.Fprintf(&metadata, "model=%s\n", model) + default: + model := strings.TrimSpace(audioConfig.OpenAIModel) + if model == "" { + model = audio.DefaultProviderConfig().OpenAIModel + } + fmt.Fprintf(&metadata, "model=%s\n", model) } fmt.Fprintf(&metadata, "voice=%s\n", voice) fmt.Fprintf(&metadata, "speed=%.2f\n", speed) diff --git a/internal/gui/generator_test.go b/internal/gui/generator_test.go index a6e3742..f9cb2a0 100644 --- a/internal/gui/generator_test.go +++ b/internal/gui/generator_test.go @@ -191,6 +191,7 @@ func TestGenerateAudioUsesSharedOpenAIVoices(t *testing.T) { Provider: "openai", OutputDir: tempDir, OpenAIModel: "gpt-4o-mini-tts", + GeminiTTSModel: "sentinel-gemini-model", OpenAIInstruction: "Speak clearly.", }, } @@ -218,6 +219,18 @@ func TestGenerateAudioUsesSharedOpenAIVoices(t *testing.T) { if !strings.HasSuffix(outputPath, "audio.mp3") { t.Fatalf("outputPath = %q, want shared audio filename", outputPath) } + + metadataData, err := os.ReadFile(filepath.Join(cardDir, "audio_metadata.txt")) + if err != nil { + t.Fatalf("expected metadata file: %v", err) + } + metadata := string(metadataData) + if !strings.Contains(metadata, "model=gpt-4o-mini-tts") { + t.Fatalf("openai metadata missing active model: %q", metadata) + } + if strings.Contains(metadata, "sentinel-gemini-model") { + t.Fatalf("openai metadata should not use Gemini model when provider is OpenAI: %q", metadata) + } } func TestGenerateAudioUsesGeminiModelDefaultVoiceAndAttribution(t *testing.T) { diff --git a/internal/gui/navigation.go b/internal/gui/navigation.go index 4acbb50..c58251c 100644 --- a/internal/gui/navigation.go +++ b/internal/gui/navigation.go @@ -301,6 +301,7 @@ func (a *Application) loadWordByIndex(index int) { a.currentAudioFileBack = job.AudioFileBack a.currentImage = job.ImageFile a.currentCardType = job.CardType + a.syncCardTypeSelection(internal.CardType(job.CardType)) fyne.Do(func() { if job.Translation != "" { @@ -425,15 +426,8 @@ func (a *Application) loadExistingFiles(word string) { fmt.Printf("DEBUG (loadExistingFiles): Loaded card type: %s (isBgBg: %v)\n", cardType, cardType.IsBgBg()) // Update UI card type selector - fyne.Do(func() { - if cardType.IsBgBg() { - fmt.Printf("DEBUG (loadExistingFiles): Setting UI to bg-bg (Bulgarian → Bulgarian)\n") - a.cardTypeSelect.SetSelected("Bulgarian → Bulgarian") - } else { - fmt.Printf("DEBUG (loadExistingFiles): Setting UI to en-bg (English → Bulgarian)\n") - a.cardTypeSelect.SetSelected("English → Bulgarian") - } - }) + fmt.Printf("DEBUG (loadExistingFiles): Syncing UI card type selector to %s\n", cardType) + a.syncCardTypeSelection(cardType) // Load audio file(s) if cardType.IsBgBg() { |
