| Age | Commit message (Collapse) | Author |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- Removed duplicate fyne.KeyA handler that was triggering both front and back audio
- Added SetAudioFileNoAutoPlay() method for controlled playback
- Front audio (a key) now auto-plays only front audio
- Back audio (A key) now auto-plays only back audio
- Refactored startPlayback to use startPlaybackForFile for better control
- Fixed icon reset when playback finishes for each audio type separately
|
|
Created TROUBLESHOOTING.md with detailed investigation of the reported issue
where A (regenerate back audio) may be regenerating the wrong side for
Bulgarian-Bulgarian cards.
Includes:
- Issue description and expected behavior
- Current implementation details
- Data flow analysis
- Debugging steps to reproduce and verify
- List of potential root causes
- Related code files
- Test case for reproducibility
|
|
|
|
Add console debug output to understand which side (front/back) is being
regenerated for audio A and P key presses.
|
|
- Remove Space key handler from handleShortcutKey
Space is not needed - use P/Shift+P instead
- Clarify hotkeys help text
p/п = play front audio
P/П = play back audio (bg-bg only)
The SetOnTypedRune handler already correctly handles case-sensitive
keys (p vs P, a vs A) for both playback and regeneration.
|
|
- Add Space key as primary hotkey to play back audio (bg-bg cards only)
More intuitive than Shift+P for playing the second audio
- Change back audio button icon from MediaSkipNextIcon to MediaPlayIcon
Both front and back buttons now use the same play icon for consistency
- Update hotkeys help dialog to document Space key
Mark P/П as legacy (kept for backward compatibility)
This makes the UI more consistent and the Space key is more natural
for playing the back audio without using Shift.
|
|
Now that the root cause is fixed in the processor, remove the debug
logging that was added for troubleshooting.
|
|
- Fix critical bug where generateAudioBgBg() was creating two separate
card directories (one for front audio, one for back audio)
- Root cause: generateAudioWithVoiceAndFilename() calls findOrCreateWordDirectory()
with both the front word AND the back word, creating separate directories
- Solution: Pass wordDir to both audio generation calls
- Create new generateAudioWithVoiceAndFilenameInDir() function
- Refactor generateAudioWithVoiceAndFilename() to use new function
- generateAudioBgBg() now finds directory ONCE and passes it to both calls
This fixes the issue where opening a bg-bg card showed 'no audio loaded'
because audio_front.mp3 and audio_back.mp3 were in different directories.
|
|
- Add debug logging to navigation.go to diagnose audio file loading issues
Prints paths being checked and whether files are found
- Improve AudioPlayer UI for Bulgarian-Bulgarian cards:
- Add labels showing 'Front' and 'Back' for bg-bg audio buttons
- Labels only show when audio files are actually loaded
- Better visual distinction between the two playable audios
- Reorganized button layout with VBox for cleaner appearance
- Track bg-bg state in AudioPlayer (isBgBg field)
- Automatically set when back audio file is loaded
- Used to determine when to show labels
This makes it clearer that Bulgarian-Bulgarian cards have two independently
playable audio outputs, and helps debug why audio isn't being loaded.
|
|
- Fix scanExistingWords() to detect cards with audio_front/audio_back files
Previously only checked for audio.mp3, missing Bulgarian-Bulgarian cards
- Fix checkForMissingFiles() to also look for bg-bg audio files
Now checks both audio.mp3 (en-bg) and audio_front.mp3 (bg-bg)
- Add check for back audio file in checkForMissingFiles()
Ensures SetBackAudioFile is called when audio_back is loaded later
This fixes the issue where opening an existing Bulgarian-Bulgarian card
would not load the audio files, leaving the play buttons non-functional.
|
|
- Update README.md with complete batch file format documentation
- Expanded from 3 to 5 supported formats
- Added Format 4: Bulgarian-Bulgarian (monolingual) using double equals
- Clarified Format 2 as English→Bulgarian with single equals
- Noted that bg-bg cards generate two separate audio files
- Update CLI help text to show batch file format examples
- Added example of double equals syntax
- Clarified single equals creates English→Bulgarian cards
This closes the documentation gap for the Bulgarian-Bulgarian flashcard feature
that was already implemented in the codebase.
|
|
Replace task runner with mage for build automation.
All existing targets preserved: build, run, test variants, install, clean.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
|
|
|
|
|
|
|
|
|
cards
- Fix race condition where images, audio, and phonetic info could be saved to wrong flashcard when navigating quickly between cards
- Add pre-determined card directory that's passed to all background operations
- Track active operations per word to prevent deletion during generation
- Block deletion of cards that are queued or being processed
- Show appropriate error messages when deletion is blocked
This ensures files are always saved to the correct card directory and prevents data loss from deleting cards with active operations.
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
|
|
- Add 'в' and 'В' (Cyrillic) key handling for archive functionality
- Ensures archive works with both Latin 'v' and Cyrillic 'в' keyboards
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
- Add 'v' hotkey for archive all cards functionality
- Change regenerate image icon to ColorPaletteIcon (artistic palette)
- Change random image icon to ViewRefreshIcon (refresh symbol)
- Update help dialog to include archive hotkey in Export & Archive section
- Add hotkey hint to archive button tooltip
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
- Move totalrecall.desktop, install-icon.sh, and config.yaml.example to assets/ directory
- Update all references in README.md and install-icon.sh
- Add file organization guidelines to AGENTS.md
- Clean up root directory structure
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
|
|
- Fixed background image generation race conditions
- Fixed UI updates when navigating between cards
- Improved file sync and error handling
|
|
- Add file.Sync() after image download to ensure data is flushed to disk
- Add double-checking in UI updates to prevent wrong card updates
- Fix background job completion to reload files when user navigates back
- Add file size validation in image display widget
- Improve error messages for image loading failures
This fixes two issues:
1. 'png: invalid format: not enough pixel data' error when navigating during generation
2. Images not updating when navigating back to a card after background generation completes
|
|
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Bulk Import Enhancements
- Added support for three flexible batch file formats:
- `BULGARIAN = ENGLISH` - Both provided, no translation needed
- `= ENGLISH` - Only English provided, auto-translated to Bulgarian
- `BULGARIAN` - Only Bulgarian provided, auto-translated to English
- Implemented smart file checking to skip already processed words
- Check all required files (word.txt, translation.txt, phonetic.txt, audio/image files and their attribution/metadata)
- Added batch processing summary with statistics
## Archive Functionality
- Renamed --clear flag to --archive for clarity
- Archive cards directory to ~/.local/state/totalrecall/archive/cards-TIMESTAMP
- Added archive button to GUI toolbar with folder icon
- Archive confirmation dialog supports keyboard shortcuts (y/n/c/ESC)
## Export Improvements
- Anki exports now show full file path in output
- Changed default export location to home directory (~) for both CLI and GUI
- Auto-adjust image size to 1024x1024 when DALL-E 3 is selected
## Other Improvements
- Added TranslateEnglishToBulgarian method for reverse translation
- Enhanced batch processing with better error handling and progress reporting
- Improved file integrity checking for complete word processing
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
|
|
- Update phonetic display as soon as data is available, not after image generation
- Apply fix to both single word and batch processing modes
- Improves user experience by showing IPA transcription without delay
- Bump version to 0.7.1
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
Moves the phonetic information fetching to occur immediately after the word has been translated. This ensures that the phonetic data is available as early as possible in the processing pipeline.
Previously, the phonetic information was fetched after image generation, which caused an unnecessary delay. This change improves the logical flow of the word processing sequence.
|
|
|
|
- Fix batch mode to store cards in ~/.local/state/totalrecall/cards/ matching GUI behavior
- Add --no-auto-play flag to disable automatic audio playback (enabled by default)
- Simplify phonetic fetching in CLI to match GUI (IPA only, no detailed explanations)
- Remove redundant --gui flag as GUI is already the default mode
- Align image generation settings: both modes now use DALL-E 2 with 512x512 resolution
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
New Features:
- Added auto-play feature for audio with 'u'/'у' hotkey toggle
- Auto-play is enabled by default on app startup
- Automatically plays audio when new files are generated
- Automatically plays audio when navigating between cards
- Added Escape key support to unfocus all input fields
- Works for Bulgarian word input
- Works for English translation input
- Works for image prompt multi-line input
Improvements:
- Increased default window size by 10% (800x700 → 880x770)
- Fixed duplicate hotkey handling for 'u', 'h', and 'l' keys
- Fixed tooltip initialization error by deferring audio player tooltips
Bug Fixes:
- Fixed Fyne threading errors in audio playback
- Fixed tooltip layer initialization order issue
- Removed duplicate keyboard shortcut handlers
The auto-play feature enhances the learning experience by automatically
playing pronunciation audio when cards are generated or when navigating
through existing cards. Users can toggle this feature on/off at any time
using the 'u' or 'у' hotkey.
|
|
- Replace phonetic display with a proper log viewer widget
- Prepend new log messages instead of appending to show newest first
- Capture stdout/stderr output to display in the log viewer
- Remove problematic auto-scroll functionality that wasn't working
- Add timestamp to each log message for better tracking
This approach eliminates the need for auto-scrolling since the latest
messages are always visible at the top of the log viewer.
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
Add test suites for all newly created packages from the main.go refactoring:
- batch: 100% coverage - file reading, parsing, edge cases
- cli: 96.7% coverage - command setup, flags, configuration
- translation: 92% coverage - API integration, caching, errors
- phonetic: 87.5% coverage - API fetching, file operations
- models: 77.3% coverage - model listing functionality
- processor: 18% coverage - basic tests (limited by API dependencies)
Total: 1159 lines of test code across 7 new test files
🤖 Generated with [opencode](https://opencode.ai)
Co-Authored-By: opencode <noreply@opencode.ai>
|
|
- Reduced main.go from 961 lines to 89 lines (91% reduction)
- Created new packages for better separation of concerns:
- cli: Command-line interface setup and configuration
- processor: Core word processing logic and orchestration
- batch: Batch file processing functionality
- translation: Bulgarian to English translation services
- models: OpenAI model listing functionality
- phonetic: Phonetic information fetching
- Each package has clear documentation in doc.go files
- Improved testability and maintainability
- All existing functionality preserved
- All tests passing and build successful
|