diff options
| author | Nahor <nahor.j+github@gmail.com> | 2024-10-02 13:40:32 -0700 |
|---|---|---|
| committer | Nahor <nahor.j+github@gmail.com> | 2024-10-02 13:40:32 -0700 |
| commit | c52867eb8bf69f67e702b87dd2bf12125aa7ab12 (patch) | |
| tree | 8bd8d22b1de936b279063e0a43c1c740708a7c15 /src/watch/state.rs | |
| parent | 26fd97a209d936755aa653ee0110d17d27e47306 (diff) | |
Add command to check all the exercises
This allows for skipping repeating "next" when multiple exercises
are done at once, or when earlier exercises have been updated/changed
(and thus must be redone) while still working of the whole set (i.e.
the final check_all is not yet available to flag those undone exercises)
Diffstat (limited to 'src/watch/state.rs')
| -rw-r--r-- | src/watch/state.rs | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/watch/state.rs b/src/watch/state.rs index 19910f0..67a6357 100644 --- a/src/watch/state.rs +++ b/src/watch/state.rs @@ -196,6 +196,11 @@ impl<'a> WatchState<'a> { stdout.write_all(b":list / ")?; stdout.queue(SetAttribute(Attribute::Bold))?; + stdout.write_all(b"c")?; + stdout.queue(ResetColor)?; + stdout.write_all(b":check all / ")?; + + stdout.queue(SetAttribute(Attribute::Bold))?; stdout.write_all(b"x")?; stdout.queue(ResetColor)?; stdout.write_all(b":reset / ")?; @@ -274,6 +279,23 @@ impl<'a> WatchState<'a> { Ok(()) } + pub fn check_all_exercises(&mut self, stdout: &mut StdoutLock) -> Result<ExercisesProgress> { + stdout.write_all(b"\n")?; + + if let Some(first_fail) = self.app_state.check_all_exercises(stdout, false)? { + // Only change exercise if the current one is done... + if self.app_state.current_exercise().done { + self.app_state.set_current_exercise_ind(first_fail)?; + } + // ...but always pretend it's a "new" anyway because that refreshes + // the display + Ok(ExercisesProgress::NewPending) + } else { + self.app_state.render_final_message(stdout)?; + Ok(ExercisesProgress::AllDone) + } + } + pub fn update_term_width(&mut self, width: u16, stdout: &mut StdoutLock) -> io::Result<()> { if self.term_width != width { self.term_width = width; |
