aboutsummaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/cli/src/run.rs57
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);
- }
- };
+ }
}