summaryrefslogtreecommitdiff
path: root/internal/cli
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-07-21 15:06:01 +0300
committerPaul Buetow <paul@buetow.org>2025-07-21 15:06:01 +0300
commitf3e301168ad742a556b336761e28f739eb1d7143 (patch)
tree36992608c8ddaab8b5d44221d4eab6f98eb5c8b9 /internal/cli
parentb562f3b57f8e4f106aad8856e55b51f1d9d9a367 (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.go9
-rw-r--r--internal/cli/command_test.go4
-rw-r--r--internal/cli/flags.go6
-rw-r--r--internal/cli/flags_test.go8
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",
}