Show better results in the progress window

This commit is contained in:
2Shirt 2025-06-04 20:37:39 -07:00
parent ee7147a187
commit 5ba30e626f
Signed by: 2Shirt
GPG key ID: 152FAC923B0E132C
2 changed files with 34 additions and 18 deletions

View file

@ -14,7 +14,7 @@
// along with Deja-Vu. If not, see <https://www.gnu.org/licenses/>.
//
use core::{
action::Action,
action::{Action, DiagResult},
components::{
Component,
footer::Footer,
@ -470,6 +470,10 @@ impl App {
}
_ => (),
}
self.action_tx.send(Action::DiagLineUpdate {
result: current_group.get_pass_fail_warn(),
text: current_group.result.clone(),
})?;
}
}
return Ok(());
@ -850,7 +854,7 @@ fn build_left_items(app: &App) -> Action {
.iter()
.map(|group| {
let label = group.diag_type.to_string();
let status = if group.passed {
let status = if group.get_pass_fail_warn() == DiagResult::Pass {
"" // Leave blank if OK
} else {
" -- Issue(s) detected"

View file

@ -13,7 +13,7 @@
// You should have received a copy of the GNU General Public License
// along with Deja-Vu. If not, see <https://www.gnu.org/licenses/>.
use core::{line::DVLine, tasks::TaskResult};
use core::{action::DiagResult, line::DVLine, tasks::TaskResult};
use std::{fmt, sync::OnceLock, thread::sleep, time::Duration};
use ratatui::style::Color;
@ -93,7 +93,7 @@ pub struct Log {
#[derive(Clone, Debug)]
pub struct DiagGroup {
pub diag_type: Type,
pub passed: bool,
pub passed: Vec<bool>,
pub logs: Vec<Log>,
pub result: String,
}
@ -102,7 +102,7 @@ impl DiagGroup {
pub fn new(diag_type: Type) -> Self {
DiagGroup {
diag_type,
passed: true,
passed: Vec::new(),
logs: Vec::new(),
result: String::new(),
}
@ -124,6 +124,18 @@ impl DiagGroup {
.for_each(|log| summaries.extend(log.summary.clone().into_iter()));
summaries
}
pub fn get_pass_fail_warn(&self) -> DiagResult {
let all_passed = self.passed.iter().fold(true, |acc, result| acc && *result);
let all_failed = self.passed.iter().fold(true, |acc, result| acc && !*result);
if all_passed {
DiagResult::Pass
} else if all_failed {
DiagResult::Fail
} else {
DiagResult::Warn
}
}
}
pub fn get_diag_type(label: &str) -> Type {
@ -151,7 +163,7 @@ pub fn parse_bitlocker(diag_group: &mut DiagGroup, task_result: TaskResult) {
let re_bitlocker_off = REGEXES.bitlocker_off();
match task_result {
TaskResult::Error(err) => {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Error");
diag_group.logs.push(Log {
label: String::from("Bitlocker"),
@ -172,7 +184,7 @@ pub fn parse_bitlocker(diag_group: &mut DiagGroup, task_result: TaskResult) {
let set_result_text = !output_text.contains("All Key Protectors");
if re_bitlocker_off.is_match(&output_text) {
diag_group.passed &= true;
diag_group.passed.push(true);
result = String::from("OK");
diag_group.logs.push(Log {
label: String::from("Bitlocker"),
@ -183,7 +195,7 @@ pub fn parse_bitlocker(diag_group: &mut DiagGroup, task_result: TaskResult) {
raw: output_text,
});
} else if re_bitlocker_locked.is_match(&output_text) {
diag_group.passed = false;
diag_group.passed.push(false);
result = String::from("Locked");
diag_group.logs.push(Log {
label: String::from("Bitlocker"),
@ -194,7 +206,7 @@ pub fn parse_bitlocker(diag_group: &mut DiagGroup, task_result: TaskResult) {
raw: output_text,
});
} else {
diag_group.passed &= true;
diag_group.passed.push(true);
result = String::from("Unknown");
diag_group.logs.push(Log {
label: String::from("Bitlocker"),
@ -216,7 +228,7 @@ pub fn parse_chkdsk(diag_group: &mut DiagGroup, task_result: TaskResult) {
}
match task_result {
TaskResult::Error(err) => {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Error");
diag_group.logs.push(Log {
label: String::from("CHKDSK"),
@ -241,7 +253,7 @@ pub fn parse_chkdsk(diag_group: &mut DiagGroup, task_result: TaskResult) {
if parsed_output.contains("Windows has scanned the file system and found no problems.")
{
diag_group.passed &= true;
diag_group.passed.push(true);
diag_group.result = String::from("OK");
diag_group.logs.push(Log {
label: String::from("CHKDSK"),
@ -252,7 +264,7 @@ pub fn parse_chkdsk(diag_group: &mut DiagGroup, task_result: TaskResult) {
raw: parsed_output,
});
} else {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Error");
diag_group.logs.push(Log {
label: String::from("CHKDSK"),
@ -274,7 +286,7 @@ pub fn parse_dism(diag_group: &mut DiagGroup, task_result: TaskResult) {
}
match task_result {
TaskResult::Error(err) => {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Error");
diag_group.logs.push(Log {
label: String::from("DISM"),
@ -293,7 +305,7 @@ pub fn parse_dism(diag_group: &mut DiagGroup, task_result: TaskResult) {
};
if output_text.contains("no component store corruption detected") {
diag_group.passed &= true;
diag_group.passed.push(true);
diag_group.result = String::from("OK");
diag_group.logs.push(Log {
label: String::from("DISM"),
@ -304,7 +316,7 @@ pub fn parse_dism(diag_group: &mut DiagGroup, task_result: TaskResult) {
raw: output_text,
});
} else {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Unknown");
diag_group.logs.push(Log {
label: String::from("DISM"),
@ -326,7 +338,7 @@ pub fn parse_system_files(diag_group: &mut DiagGroup, task_result: TaskResult) {
}
match task_result {
TaskResult::Error(err) => {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Error");
diag_group.logs.push(Log {
label: String::from("System Files"),
@ -345,7 +357,7 @@ pub fn parse_system_files(diag_group: &mut DiagGroup, task_result: TaskResult) {
};
if passed {
diag_group.passed &= true;
diag_group.passed.push(true);
diag_group.result = String::from("OK");
diag_group.logs.push(Log {
label: String::from("System Files"),
@ -356,7 +368,7 @@ pub fn parse_system_files(diag_group: &mut DiagGroup, task_result: TaskResult) {
raw: output_text,
});
} else {
diag_group.passed = false;
diag_group.passed.push(false);
diag_group.result = String::from("Error");
diag_group.logs.push(Log {
label: String::from("System Files"),