From b06c0db27d9c6d80f8e777070fc578ab2ad063e1 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Tue, 20 May 2025 20:18:45 -0700 Subject: [PATCH] Add fn add_group() to tasks Allows for a better tracking of group start and end to update the progress window --- boot_diags/src/app.rs | 183 ++++++++++++++++++++++-------------------- core/src/action.rs | 4 +- core/src/tasks.rs | 21 ++++- 3 files changed, 117 insertions(+), 91 deletions(-) diff --git a/boot_diags/src/app.rs b/boot_diags/src/app.rs index dd995a3..9afeafd 100644 --- a/boot_diags/src/app.rs +++ b/boot_diags/src/app.rs @@ -400,7 +400,7 @@ impl App { self.action_tx.send(build_right_items(self))?; self.action_tx.send(Action::Select(None, None))?; } - Action::TaskStart(ref title) => { + Action::TaskGroupStart(ref title) => { if self.cur_mode == Mode::BootScan { info!("TaskGroup: {:?}", self.task_groups.front()); if self.task_groups.front().is_some() { @@ -608,51 +608,50 @@ impl App { // BCD if !letter_boot.is_empty() { - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\bcdedit.exe", &self.system32)), - vec![ - String::from("/store"), - format!( - "{letter_boot}:{}\\Boot\\BCD", - if table_type == PartitionTableType::Guid { - "\\EFI\\Microsoft" - } else { - "" - } - ), - String::from("/enum"), - ], - )); - self.task_groups - .push_back(Some(format!("{}", diags::Type::BootConfigData))); + self.tasks.add_group( + "Boot Files", + vec![TaskType::CommandWait( + PathBuf::from(format!("{}\\bcdedit.exe", &self.system32)), + vec![ + String::from("/store"), + format!( + "{letter_boot}:{}\\Boot\\BCD", + if table_type == PartitionTableType::Guid { + "\\EFI\\Microsoft" + } else { + "" + } + ), + String::from("/enum"), + ], + )], + ); + self.task_groups.push_back(Some(String::from("Boot Files"))); } // Bitlocker - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\manage-bde.exe", &self.system32)), - vec![String::from("-status"), format!("{letter_os}:")], - )); - self.task_groups.push_back(None); - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\manage-bde.exe", &self.system32)), + self.tasks.add_group( + "Bitlocker", vec![ - String::from("-protectors"), - String::from("-get"), - format!("{letter_os}:"), + TaskType::CommandWait( + PathBuf::from(format!("{}\\manage-bde.exe", &self.system32)), + vec![String::from("-status"), format!("{letter_os}:")], + ), + TaskType::CommandWait( + PathBuf::from(format!("{}\\manage-bde.exe", &self.system32)), + vec![ + String::from("-protectors"), + String::from("-get"), + format!("{letter_os}:"), + ], + ), ], - )); - self.task_groups - .push_back(Some(format!("{}", diags::Type::Bitlocker))); + ); + self.task_groups.push_back(Some(String::from("Bitlocker"))); // Filesystem Health - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\chkdsk.exe", &self.system32)), - vec![format!("{letter_os}:")], - )); - self.task_groups.push_back(None); - - // Files/Folders let paths: Vec = [ + // Files/Folders "Users", "Program Files", "Program Files (x86)", @@ -662,62 +661,72 @@ impl App { .iter() .map(|s| PathBuf::from(format!("{letter_os}:\\{s}"))) .collect(); - self.tasks.add(TaskType::TestPaths(paths)); - self.task_groups - .push_back(Some(format!("{}", diags::Type::FileSystem))); + self.tasks.add_group( + "Filesystem", + vec![ + TaskType::CommandWait( + PathBuf::from(format!("{}\\chkdsk.exe", &self.system32)), + vec![format!("{letter_os}:")], + ), + TaskType::TestPaths(paths), + ], + ); + self.task_groups.push_back(Some(String::from("Filesystem"))); // DISM Health - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\dism.exe", &self.system32)), - vec![format!("{letter_os}:")], - )); + self.tasks.add_group( + "System Files", + vec![TaskType::CommandWait( + PathBuf::from(format!("{}\\dism.exe", &self.system32)), + vec![format!("{letter_os}:")], + )], + ); self.task_groups - .push_back(Some(format!("{}", diags::Type::System))); + .push_back(Some(String::from("System Files"))); // Registry - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\reg.exe", &self.system32)), + self.tasks.add_group( + "Registry", vec![ - String::from("load"), - String::from("HKLM\\TmpSoftware"), - format!("{letter_os}:\\Windows\\System32\\config\\SOFTWARE"), + TaskType::CommandWait( + PathBuf::from(format!("{}\\reg.exe", &self.system32)), + vec![ + String::from("load"), + String::from("HKLM\\TmpSoftware"), + format!("{letter_os}:\\Windows\\System32\\config\\SOFTWARE"), + ], + ), + TaskType::CommandWait( + PathBuf::from(format!("{}\\reg.exe", &self.system32)), + vec![ + String::from("load"), + String::from("HKLM\\TmpSystem"), + format!("{letter_os}:\\Windows\\System32\\config\\SYSTEM"), + ], + ), + TaskType::CommandWait( + PathBuf::from(format!("{}\\reg.exe", &self.system32)), + vec![ + String::from("load"), + String::from("HKU\\TmpDefault"), + format!("{letter_os}:\\Windows\\System32\\config\\DEFAULT"), + ], + ), + TaskType::CommandWait( + PathBuf::from(format!("{}\\reg.exe", &self.system32)), + vec![String::from("unload"), String::from("HKLM\\TmpSoftware")], + ), + TaskType::CommandWait( + PathBuf::from(format!("{}\\reg.exe", &self.system32)), + vec![String::from("unload"), String::from("HKLM\\TmpSystem")], + ), + TaskType::CommandWait( + PathBuf::from(format!("{}\\reg.exe", &self.system32)), + vec![String::from("unload"), String::from("HKU\\TmpDefault")], + ), ], - )); - self.task_groups.push_back(None); - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\reg.exe", &self.system32)), - vec![ - String::from("load"), - String::from("HKLM\\TmpSystem"), - format!("{letter_os}:\\Windows\\System32\\config\\SYSTEM"), - ], - )); - self.task_groups.push_back(None); - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\reg.exe", &self.system32)), - vec![ - String::from("load"), - String::from("HKU\\TmpDefault"), - format!("{letter_os}:\\Windows\\System32\\config\\DEFAULT"), - ], - )); - self.task_groups.push_back(None); - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\reg.exe", &self.system32)), - vec![String::from("unload"), String::from("HKLM\\TmpSoftware")], - )); - self.task_groups.push_back(None); - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\reg.exe", &self.system32)), - vec![String::from("unload"), String::from("HKLM\\TmpSystem")], - )); - self.task_groups.push_back(None); - self.tasks.add(TaskType::CommandWait( - PathBuf::from(format!("{}\\reg.exe", &self.system32)), - vec![String::from("unload"), String::from("HKU\\TmpDefault")], - )); - self.task_groups - .push_back(Some(format!("{}", diags::Type::Registry))); + ); + self.task_groups.push_back(Some(String::from("Registry"))); self.tasks.add(TaskType::Sleep); // NOTE: DELETEME } } diff --git a/core/src/action.rs b/core/src/action.rs index 7c6aff9..8f9ace5 100644 --- a/core/src/action.rs +++ b/core/src/action.rs @@ -21,7 +21,6 @@ use crate::{ line::DVLine, state::Mode, system::disk::Disk, - tasks::TaskType, }; #[derive(Debug, Clone, PartialEq, Eq, Display, Serialize, Deserialize)] @@ -44,7 +43,8 @@ pub enum Action { ScanDisks, Select(Option, Option), // indicies for (source, dest) etc SelectRight(Option, Option), // indicies for right info pane - TaskStart(String), + TaskGroupStart(String), + TaskGroupEnd, TasksComplete, UpdateDiskList(Vec), UpdateFooter(String), diff --git a/core/src/tasks.rs b/core/src/tasks.rs index 386c370..f0ddd65 100644 --- a/core/src/tasks.rs +++ b/core/src/tasks.rs @@ -52,6 +52,8 @@ pub enum TaskType { TestPaths(Vec), UpdateDestDisk(usize), // (disk_index) UpdateDiskList, + GroupStart { label: String }, + GroupEnd, } impl fmt::Display for TaskType { @@ -72,6 +74,8 @@ impl fmt::Display for TaskType { TaskType::TestPaths(_) => write!(f, "TestPaths"), TaskType::UpdateDestDisk(_) => write!(f, "UpdateDestDisk"), TaskType::UpdateDiskList => write!(f, "UpdateDiskList"), + TaskType::GroupStart { label } => write!(f, "GroupStart({})", &label), + TaskType::GroupEnd => write!(f, "GroupEnd"), } } } @@ -127,6 +131,17 @@ impl Tasks { self.task_list.push_back(Task::new(task_type)); } + pub fn add_group(&mut self, group_label: &str, group_tasks: Vec) { + info!("Adding task group: {group_label}"); + self.task_list.push_back(Task::new(TaskType::GroupStart { + label: group_label.to_string(), + })); + group_tasks.into_iter().for_each(|task| { + self.task_list.push_back(Task::new(task)); + }); + self.task_list.push_back(Task::new(TaskType::GroupEnd)); + } + #[must_use] pub fn idle(&self) -> bool { self.cur_handle.is_none() @@ -184,8 +199,6 @@ impl Tasks { cmd_args.clone(), task_tx, )); - self.action_tx - .send(Action::TaskStart(cmd_path.to_string_lossy().into_owned()))?; } TaskType::Diskpart(ref script) => { self.cur_handle = Some(run_task_diskpart(script, task_tx)); @@ -235,6 +248,10 @@ impl Tasks { } })); } + TaskType::GroupStart { ref label } => { + self.action_tx.send(Action::TaskGroupStart(label.clone()))? + } + TaskType::GroupEnd => self.action_tx.send(Action::TaskGroupEnd)?, } // Done self.cur_task.replace(task);