summaryrefslogtreecommitdiff
path: root/src/app_state.rs
diff options
context:
space:
mode:
authormo8it <mo8it@proton.me>2024-10-14 01:06:11 +0200
committermo8it <mo8it@proton.me>2024-10-14 01:06:11 +0200
commitea73af9ba37bc1f6155a910c72f2ded8a0b64805 (patch)
tree039b8011ae5140baacc848195530d337725a319b /src/app_state.rs
parentfc5fc0920f3590d1b1e8c8186309ac1c5ec6fba5 (diff)
Separate initialization with a struct
Diffstat (limited to 'src/app_state.rs')
-rw-r--r--src/app_state.rs13
1 files changed, 6 insertions, 7 deletions
diff --git a/src/app_state.rs b/src/app_state.rs
index 76a4c45..57ffea8 100644
--- a/src/app_state.rs
+++ b/src/app_state.rs
@@ -20,7 +20,7 @@ use crate::{
embedded::EMBEDDED_FILES,
exercise::{Exercise, RunnableExercise},
info_file::ExerciseInfo,
- term::{self, show_exercises_check_progress},
+ term::{self, ExercisesCheckProgressVisualizer},
};
const STATE_FILE_NAME: &str = ".rustlings-state.txt";
@@ -409,13 +409,12 @@ impl AppState {
}
fn check_all_exercises_impl(&mut self, stdout: &mut StdoutLock) -> Result<Option<usize>> {
- stdout.write_all("Checking all exercises…\n".as_bytes())?;
- let next_exercise_ind = AtomicUsize::new(0);
let term_width = terminal::size()
.context("Failed to get the terminal size")?
.0;
- clear_terminal(stdout)?;
+ let mut progress_visualizer = ExercisesCheckProgressVisualizer::build(stdout, term_width)?;
+ let next_exercise_ind = AtomicUsize::new(0);
let mut progresses = vec![ExerciseCheckProgress::None; self.exercises.len()];
thread::scope(|s| {
@@ -464,7 +463,7 @@ impl AppState {
while let Ok((exercise_ind, progress)) = exercise_progress_receiver.recv() {
progresses[exercise_ind] = progress;
- show_exercises_check_progress(stdout, &progresses, term_width)?;
+ progress_visualizer.update(&progresses)?;
}
Ok::<_, Error>(())
@@ -487,7 +486,7 @@ impl AppState {
// it could be because we exceeded the limit of open file descriptors.
// Therefore, try running exercises with errors sequentially.
progresses[exercise_ind] = ExerciseCheckProgress::Checking;
- show_exercises_check_progress(stdout, &progresses, term_width)?;
+ progress_visualizer.update(&progresses)?;
let exercise = &self.exercises[exercise_ind];
let success = exercise.run_exercise(None, &self.cmd_runner)?;
@@ -501,7 +500,7 @@ impl AppState {
}
self.set_status(exercise_ind, success)?;
- show_exercises_check_progress(stdout, &progresses, term_width)?;
+ progress_visualizer.update(&progresses)?;
}
}
}