summaryrefslogtreecommitdiff
path: root/internal/gui/generator.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-07-18 19:45:35 +0300
committerPaul Buetow <paul@buetow.org>2025-07-18 19:45:35 +0300
commite1b3ba69499547424502cc7e4dacf1e10d5efde9 (patch)
tree17110ac06239ff24150cd87df7df1729f7a285ae /internal/gui/generator.go
parentcd3b1e5b2fab8075303c064ba33996a0250cd6a6 (diff)
fix: ensure single directory per card with consistent ID
- 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 <noreply@anthropic.com>
Diffstat (limited to 'internal/gui/generator.go')
-rw-r--r--internal/gui/generator.go48
1 files changed, 27 insertions, 21 deletions
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)
}