From e1b3ba69499547424502cc7e4dacf1e10d5efde9 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 18 Jul 2025 19:45:35 +0300 Subject: fix: ensure single directory per card with consistent ID MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Fixed issue where multiple directories were created for the same word - Added findCardDirectory to check for existing directories before creating new ones - Updated all file creation functions to reuse existing card directories - Applied fix to both GUI and CLI code - Added phonetic fetching to processing counter in generateMaterials - Now each card gets one directory with all its files 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- internal/gui/generator.go | 48 ++++++++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 21 deletions(-) (limited to 'internal/gui/generator.go') diff --git a/internal/gui/generator.go b/internal/gui/generator.go index f3b9563..ca9d854 100644 --- a/internal/gui/generator.go +++ b/internal/gui/generator.go @@ -100,17 +100,21 @@ func (a *Application) generateAudio(word string) (string, error) { return "", err } - // Create subdirectory for this word using card ID - cardID := internal.GenerateCardID(word) - wordDir := filepath.Join(a.config.OutputDir, cardID) - if err := os.MkdirAll(wordDir, 0755); err != nil { - return "", fmt.Errorf("failed to create word directory: %w", err) - } - - // Save the original Bulgarian word in a metadata file - metadataFile := filepath.Join(wordDir, "word.txt") - if err := os.WriteFile(metadataFile, []byte(word), 0644); err != nil { - return "", fmt.Errorf("failed to save word metadata: %w", err) + // Find existing card directory or create new one + wordDir := a.findCardDirectory(word) + if wordDir == "" { + // No existing directory, create new one with card ID + cardID := internal.GenerateCardID(word) + wordDir = filepath.Join(a.config.OutputDir, cardID) + if err := os.MkdirAll(wordDir, 0755); err != nil { + return "", fmt.Errorf("failed to create word directory: %w", err) + } + + // Save the original Bulgarian word in a metadata file + metadataFile := filepath.Join(wordDir, "word.txt") + if err := os.WriteFile(metadataFile, []byte(word), 0644); err != nil { + return "", fmt.Errorf("failed to save word metadata: %w", err) + } } // Generate filename in subdirectory @@ -163,16 +167,18 @@ func (a *Application) generateImagesWithPrompt(word string, customPrompt string, return "", fmt.Errorf("unknown image provider: %s", a.config.ImageProvider) } - // Create subdirectory for this word using card ID - cardID := internal.GenerateCardID(word) - wordDir := filepath.Join(a.config.OutputDir, cardID) - if err := os.MkdirAll(wordDir, 0755); err != nil { - return "", fmt.Errorf("failed to create word directory: %w", err) - } - - // Save the original Bulgarian word in a metadata file if not already present - metadataFile := filepath.Join(wordDir, "word.txt") - if _, err := os.Stat(metadataFile); os.IsNotExist(err) { + // Find existing card directory or create new one + wordDir := a.findCardDirectory(word) + if wordDir == "" { + // No existing directory, create new one with card ID + cardID := internal.GenerateCardID(word) + wordDir = filepath.Join(a.config.OutputDir, cardID) + if err := os.MkdirAll(wordDir, 0755); err != nil { + return "", fmt.Errorf("failed to create word directory: %w", err) + } + + // Save the original Bulgarian word in a metadata file + metadataFile := filepath.Join(wordDir, "word.txt") if err := os.WriteFile(metadataFile, []byte(word), 0644); err != nil { return "", fmt.Errorf("failed to save word metadata: %w", err) } -- cgit v1.2.3