diff options
| author | Ryan Lowe <rlowe13@me.com> | 2022-02-05 16:54:11 -0500 |
|---|---|---|
| committer | Ryan Lowe <rlowe13@me.com> | 2022-02-05 16:54:11 -0500 |
| commit | 9be012dda0617e868c044a22e815933bc0db2cb0 (patch) | |
| tree | 9c7d679977e8a6837cbd5af10c50f2a01c25f6cd /src/main.rs | |
| parent | cd2b5e8e3b616e769d2c17df45f813772aa81530 (diff) | |
feat!: Add progress indicator
closes #360
BREAKING CHANGE: verify() has a new function signature so it can
know the current completion progress
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/main.rs b/src/main.rs index 32e7bba..96378ec 100644 --- a/src/main.rs +++ b/src/main.rs @@ -214,7 +214,7 @@ fn main() { } Subcommands::Verify(_subargs) => { - verify(&exercises, verbose).unwrap_or_else(|_| std::process::exit(1)); + verify(&exercises, (0, exercises.len()), verbose).unwrap_or_else(|_| std::process::exit(1)); } Subcommands::Watch(_subargs) => match watch(&exercises, verbose) { @@ -351,7 +351,7 @@ fn watch(exercises: &[Exercise], verbose: bool) -> notify::Result<WatchStatus> { clear_screen(); let to_owned_hint = |t: &Exercise| t.hint.to_owned(); - let failed_exercise_hint = match verify(exercises.iter(), verbose) { + let failed_exercise_hint = match verify(exercises.iter(), (0, exercises.len()), verbose) { Ok(_) => return Ok(WatchStatus::Finished), Err(exercise) => Arc::new(Mutex::new(Some(to_owned_hint(exercise)))), }; @@ -362,17 +362,16 @@ fn watch(exercises: &[Exercise], verbose: bool) -> notify::Result<WatchStatus> { DebouncedEvent::Create(b) | DebouncedEvent::Chmod(b) | DebouncedEvent::Write(b) => { if b.extension() == Some(OsStr::new("rs")) && b.exists() { let filepath = b.as_path().canonicalize().unwrap(); - let pending_exercises = exercises - .iter() - .skip_while(|e| !filepath.ends_with(&e.path)) - // .filter(|e| filepath.ends_with(&e.path)) + let pending_exercises = exercises.iter() + .find(|e| filepath.ends_with(&e.path)).into_iter() .chain( exercises .iter() .filter(|e| !e.looks_done() && !filepath.ends_with(&e.path)), ); + let num_done = exercises.iter().filter(|e| e.looks_done()).count(); clear_screen(); - match verify(pending_exercises, verbose) { + match verify(pending_exercises, (num_done, exercises.len()), verbose) { Ok(_) => return Ok(WatchStatus::Finished), Err(exercise) => { let mut failed_exercise_hint = failed_exercise_hint.lock().unwrap(); |
