diff options
| author | Paul Buetow <paul@buetow.org> | 2025-07-21 15:06:01 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2025-07-21 15:06:01 +0300 |
| commit | f3e301168ad742a556b336761e28f739eb1d7143 (patch) | |
| tree | 36992608c8ddaab8b5d44221d4eab6f98eb5c8b9 /internal/cli | |
| parent | b562f3b57f8e4f106aad8856e55b51f1d9d9a367 (diff) | |
feat: improve consistency between CLI and GUI modes
- 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>
Diffstat (limited to 'internal/cli')
| -rw-r--r-- | internal/cli/command.go | 9 | ||||
| -rw-r--r-- | internal/cli/command_test.go | 4 | ||||
| -rw-r--r-- | internal/cli/flags.go | 6 | ||||
| -rw-r--r-- | internal/cli/flags_test.go | 8 |
4 files changed, 13 insertions, 14 deletions
diff --git a/internal/cli/command.go b/internal/cli/command.go index 6f9f1c0..81f9914 100644 --- a/internal/cli/command.go +++ b/internal/cli/command.go @@ -24,8 +24,7 @@ representative images from web search APIs. Examples: totalrecall # Launch interactive GUI (default) totalrecall ябълка # Generate materials for "apple" via CLI - totalrecall --batch words.txt # Process multiple words from file - totalrecall --gui # Explicitly launch GUI mode`, + totalrecall --batch words.txt # Process multiple words from file`, Args: cobra.MaximumNArgs(1), Version: internal.Version, } @@ -37,9 +36,9 @@ Examples: } func setupFlags(cmd *cobra.Command, flags *Flags) { - // Set default output directory + // Set default output directory to match GUI mode home, _ := os.UserHomeDir() - defaultOutputDir := filepath.Join(home, "Downloads") + defaultOutputDir := filepath.Join(home, ".local", "state", "totalrecall", "cards") // Global flags cmd.PersistentFlags().StringVar(&flags.CfgFile, "config", "", "config file (default is $HOME/.totalrecall.yaml)") @@ -56,7 +55,7 @@ func setupFlags(cmd *cobra.Command, flags *Flags) { cmd.Flags().StringVar(&flags.DeckName, "deck-name", flags.DeckName, "Deck name for APKG export") cmd.Flags().BoolVar(&flags.ListModels, "list-models", false, "List available OpenAI models for the current API key") cmd.Flags().BoolVar(&flags.AllVoices, "all-voices", false, "Generate audio in all available voices (creates multiple files)") - cmd.Flags().BoolVar(&flags.GUIMode, "gui", false, "Launch interactive GUI mode") + cmd.Flags().BoolVar(&flags.NoAutoPlay, "no-auto-play", false, "Disable automatic audio playback in GUI mode (auto-play is enabled by default)") // OpenAI flags cmd.Flags().StringVar(&flags.OpenAIModel, "openai-model", flags.OpenAIModel, "OpenAI TTS model: tts-1, tts-1-hd, gpt-4o-mini-tts") diff --git a/internal/cli/command_test.go b/internal/cli/command_test.go index 55e60e8..aac2e60 100644 --- a/internal/cli/command_test.go +++ b/internal/cli/command_test.go @@ -41,7 +41,7 @@ func TestCreateRootCommand(t *testing.T) { {"deck-name", true}, {"list-models", true}, {"all-voices", true}, - {"gui", true}, + {"no-auto-play", true}, {"openai-model", true}, {"openai-voice", true}, {"openai-speed", true}, @@ -80,7 +80,7 @@ func TestSetupFlags(t *testing.T) { } home, _ := os.UserHomeDir() - expectedDefault := filepath.Join(home, "Downloads") + expectedDefault := filepath.Join(home, ".local", "state", "totalrecall", "cards") if outputFlag.DefValue != expectedDefault { t.Errorf("Expected default output dir to be %s, got %s", expectedDefault, outputFlag.DefValue) } diff --git a/internal/cli/flags.go b/internal/cli/flags.go index 64575a0..ab409f5 100644 --- a/internal/cli/flags.go +++ b/internal/cli/flags.go @@ -15,7 +15,7 @@ type Flags struct { DeckName string ListModels bool AllVoices bool - GUIMode bool + NoAutoPlay bool // OpenAI flags OpenAIModel string @@ -38,8 +38,8 @@ func NewFlags() *Flags { DeckName: "Bulgarian Vocabulary", OpenAIModel: "gpt-4o-mini-tts", OpenAISpeed: 0.9, - OpenAIImageModel: "dall-e-3", - OpenAIImageSize: "1024x1024", + OpenAIImageModel: "dall-e-2", + OpenAIImageSize: "512x512", OpenAIImageQuality: "standard", OpenAIImageStyle: "natural", } diff --git a/internal/cli/flags_test.go b/internal/cli/flags_test.go index d308bb7..ccc50a0 100644 --- a/internal/cli/flags_test.go +++ b/internal/cli/flags_test.go @@ -19,8 +19,8 @@ func TestNewFlags(t *testing.T) { {"DeckName", flags.DeckName, "Bulgarian Vocabulary"}, {"OpenAIModel", flags.OpenAIModel, "gpt-4o-mini-tts"}, {"OpenAISpeed", flags.OpenAISpeed, 0.9}, - {"OpenAIImageModel", flags.OpenAIImageModel, "dall-e-3"}, - {"OpenAIImageSize", flags.OpenAIImageSize, "1024x1024"}, + {"OpenAIImageModel", flags.OpenAIImageModel, "dall-e-2"}, + {"OpenAIImageSize", flags.OpenAIImageSize, "512x512"}, {"OpenAIImageQuality", flags.OpenAIImageQuality, "standard"}, {"OpenAIImageStyle", flags.OpenAIImageStyle, "natural"}, } @@ -44,7 +44,7 @@ func TestNewFlags(t *testing.T) { {"AnkiCSV", flags.AnkiCSV}, {"ListModels", flags.ListModels}, {"AllVoices", flags.AllVoices}, - {"GUIMode", flags.GUIMode}, + {"NoAutoPlay", flags.NoAutoPlay}, } for _, tt := range boolTests { @@ -84,7 +84,7 @@ func TestFlagsStructure(t *testing.T) { expectedFields := []string{ "CfgFile", "OutputDir", "AudioFormat", "ImageAPI", "BatchFile", "SkipAudio", "SkipImages", "GenerateAnki", "AnkiCSV", "DeckName", - "ListModels", "AllVoices", "GUIMode", + "ListModels", "AllVoices", "NoAutoPlay", "OpenAIModel", "OpenAIVoice", "OpenAISpeed", "OpenAIInstruction", "OpenAIImageModel", "OpenAIImageSize", "OpenAIImageQuality", "OpenAIImageStyle", } |
