diff options
| author | Miquel Sabaté Solà <mssola@mssola.com> | 2026-01-14 16:15:11 +0100 |
|---|---|---|
| committer | Miquel Sabaté Solà <mssola@mssola.com> | 2026-01-14 16:15:11 +0100 |
| commit | 79b6db7603b727950fb5a208ab15303d31599cf3 (patch) | |
| tree | 0ade726afa97981c70e10c14b411f81f124ce3c2 /crates/cli/src | |
| parent | b5e7df3cefec1e7e7b1fb691394566f156173644 (diff) | |
| download | mihi-79b6db7603b727950fb5a208ab15303d31599cf3.tar.gz mihi-79b6db7603b727950fb5a208ab15303d31599cf3.zip | |
run: introduce --endless mode
Signed-off-by: Miquel Sabaté Solà <mssola@mssola.com>
Diffstat (limited to 'crates/cli/src')
| -rw-r--r-- | crates/cli/src/run.rs | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/crates/cli/src/run.rs b/crates/cli/src/run.rs index c6ad0a0..8af93ee 100644 --- a/crates/cli/src/run.rs +++ b/crates/cli/src/run.rs @@ -206,6 +206,7 @@ pub fn run(args: Vec<String>) { let mut category = None; let mut kind: Option<ExerciseKind> = None; let mut exercises_only = false; + let mut endless = false; let mut flags: Vec<String> = vec![]; while let Some(first) = it.next() { @@ -244,6 +245,9 @@ pub fn run(args: Vec<String>) { "-e" | "--exercises" => { exercises_only = true; } + "--endless" => { + endless = true; + } "-f" | "--flag" => match it.next() { Some(flag) => { if mihi::is_valid_word_flag(flag.as_str()) { @@ -303,32 +307,37 @@ pub fn run(args: Vec<String>) { let locale = current_locale(); - let words = match category { - Some(cat) => select_relevant_words(cat, &flags, 15), - None => select_general_words(&flags), - }; - - let exercises = match mihi::select_relevant_exercises(kind, if exercises_only { 5 } else { 1 }) - { - Ok(exercises) => exercises, - Err(e) => { - println!("error: practice: {e}"); - std::process::exit(1); - } - }; + loop { + let words = match category { + Some(cat) => select_relevant_words(cat, &flags, 15), + None => select_general_words(&flags), + }; + + let exercises = + match mihi::select_relevant_exercises(kind, if exercises_only { 5 } else { 1 }) { + Ok(exercises) => exercises, + Err(e) => { + println!("error: practice: {e}"); + std::process::exit(1); + } + }; - match words { - Ok(list) => { - let mut code = 0; - if !exercises_only { - code += run_words(list, &locale); + let mut code = 0; + match words { + Ok(list) => { + if !exercises_only { + code += run_words(list, &locale); + } + code += run_exercises(exercises); + } + Err(e) => { + println!("error: practice: {e}"); + code = 1; } - code += run_exercises(exercises); + }; + + if !endless { std::process::exit(code); } - Err(e) => { - println!("error: practice: {e}"); - std::process::exit(1); - } - }; + } } |
