From 1ce7f76229386b624fb7b7e099eb8834f2c4af45 Mon Sep 17 00:00:00 2001 From: 2Shirt <2xShirt@gmail.com> Date: Sat, 25 Jan 2025 22:59:06 -0800 Subject: [PATCH] WIP: Add BootMode menu logic --- boot_diags/src/app.rs | 64 +++++++++++++++++++++++++++++++++---------- config/config.json5 | 2 +- core/src/state.rs | 2 +- deja_vu/src/app.rs | 8 +++--- 4 files changed, 55 insertions(+), 21 deletions(-) diff --git a/boot_diags/src/app.rs b/boot_diags/src/app.rs index 0e00113..ae089df 100644 --- a/boot_diags/src/app.rs +++ b/boot_diags/src/app.rs @@ -41,6 +41,13 @@ use ratatui::{ use tokio::sync::mpsc; use tracing::{debug, info}; +#[derive(Clone, Debug, Default)] +pub enum SafeMode { + #[default] + Disable, + Enable, +} + pub struct App { // TUI action_rx: mpsc::UnboundedReceiver, @@ -56,6 +63,7 @@ pub struct App { clone: CloneSettings, cur_mode: Mode, list: StatefulList, + boot_modes: Vec, selections: Vec>, tasks: Tasks, } @@ -70,7 +78,7 @@ impl App { Mode::BootDiags, Mode::BootSetup, Mode::InjectDrivers, - Mode::ToggleSafeMode, + Mode::SetBootMode, ]); Ok(Self { // TUI @@ -94,6 +102,7 @@ impl App { clone: CloneSettings::new(disk_list_arc), cur_mode: Mode::Home, list, + boot_modes: vec![SafeMode::Enable, SafeMode::Disable], selections: vec![None, None], tasks, }) @@ -106,7 +115,7 @@ impl App { Mode::ScanDisks => Mode::SelectDisks, Mode::SelectDisks => Mode::SelectParts, Mode::SelectParts => Mode::DiagMenu, - Mode::BootDiags | Mode::BootSetup | Mode::InjectDrivers | Mode::ToggleSafeMode => { + Mode::BootDiags | Mode::BootSetup | Mode::InjectDrivers | Mode::SetBootMode => { Mode::DiagMenu } Mode::Failed => Mode::Failed, @@ -263,10 +272,7 @@ impl App { self.action_tx.send(Action::SetMode(new_mode))?; } } - Mode::BootDiags - | Mode::BootSetup - | Mode::InjectDrivers - | Mode::ToggleSafeMode => { + Mode::BootDiags | Mode::BootSetup | Mode::InjectDrivers => { let new_mode = self.next_mode(); self.action_tx.send(Action::SetMode(new_mode))?; } @@ -291,6 +297,12 @@ impl App { self.clone.part_index_boot = one; self.clone.part_index_os = two; } + Mode::SetBootMode => { + if let Some(index) = one { + // TODO: Make real + info!("Setting boot mode to: {:?}", self.boot_modes.get(index)); + } + } _ => {} }, Action::SetMode(new_mode) => { @@ -395,13 +407,10 @@ fn get_chunks(r: Rect) -> Vec { fn build_footer_string(cur_mode: Mode) -> String { match cur_mode { - Mode::BootDiags - | Mode::BootSetup - | Mode::Home - | Mode::PEMenu - | Mode::ScanDisks - | Mode::ToggleSafeMode => String::from("(q) to quit"), - Mode::InstallDrivers | Mode::InjectDrivers => { + Mode::BootDiags | Mode::BootSetup | Mode::Home | Mode::PEMenu | Mode::ScanDisks => { + String::from("(q) to quit") + } + Mode::InstallDrivers | Mode::InjectDrivers | Mode::SetBootMode => { String::from("(Enter) to select / (q) to quit") } Mode::DiagMenu | Mode::SelectParts => { @@ -483,11 +492,18 @@ fn build_left_items(app: &App) -> Action { } } } - Mode::BootDiags | Mode::BootSetup | Mode::ToggleSafeMode => { + Mode::BootDiags | Mode::BootSetup => { select_num = 0; let (new_title, _) = get_mode_strings(app.cur_mode); title = new_title; } + Mode::SetBootMode => { + select_num = 1; + title = String::from("Set Boot Mode"); + app.boot_modes.iter().for_each(|entry| { + items.push(format!("{:?} Safe Mode", entry)); + }); + } Mode::Done | Mode::Failed => { select_num = 0; title = String::from("Done"); @@ -633,6 +649,24 @@ fn build_right_items(app: &App) -> Action { } } } + Mode::SetBootMode => { + app.boot_modes.iter().for_each(|mode| { + match mode { + SafeMode::Disable => { + items.push(vec![DVLine { + line_parts: vec![String::from("Disable Safe Mode")], + line_colors: vec![Color::Reset], + }]); + } + SafeMode::Enable => { + items.push(vec![DVLine { + line_parts: vec![String::from("Enable Safe Mode (minimal)")], + line_colors: vec![Color::Reset], + }]); + } + }; + }); + } _ => {} } Action::UpdateRight(labels, start_index, items) @@ -652,7 +686,7 @@ fn get_mode_strings(mode: Mode) -> (String, String) { String::from("Inject Drivers"), String::from("Inject drivers into existing Windows environment"), ), - Mode::ToggleSafeMode => ( + Mode::SetBootMode => ( String::from("Toggle Safe Mode"), String::from("Enable or disable safe mode"), ), diff --git a/config/config.json5 b/config/config.json5 index 5e4bf8a..5f3f432 100644 --- a/config/config.json5 +++ b/config/config.json5 @@ -132,7 +132,7 @@ "": "Quit", "": "Suspend" }, - "ToggleSafeMode": { + "SetBootMode": { "": "Process", "": "KeyUp", "": "KeyDown", diff --git a/core/src/state.rs b/core/src/state.rs index 1794229..8892f81 100644 --- a/core/src/state.rs +++ b/core/src/state.rs @@ -35,7 +35,7 @@ pub enum Mode { BootDiags, BootSetup, InjectDrivers, - ToggleSafeMode, + SetBootMode, // Clone ScanDisks, InstallDrivers, diff --git a/deja_vu/src/app.rs b/deja_vu/src/app.rs index df7d968..a71427c 100644 --- a/deja_vu/src/app.rs +++ b/deja_vu/src/app.rs @@ -120,7 +120,7 @@ impl App { | Mode::DiagMenu | Mode::InjectDrivers | Mode::PEMenu - | Mode::ToggleSafeMode => panic!("This shouldn't happen?"), + | Mode::SetBootMode => panic!("This shouldn't happen?"), }; new_mode } @@ -144,7 +144,7 @@ impl App { | Mode::DiagMenu | Mode::InjectDrivers | Mode::PEMenu - | Mode::ToggleSafeMode => panic!("This shouldn't happen?"), + | Mode::SetBootMode => panic!("This shouldn't happen?"), }; if new_mode == self.cur_mode { @@ -589,7 +589,7 @@ fn build_footer_string(cur_mode: Mode) -> String { | Mode::DiagMenu | Mode::InjectDrivers | Mode::PEMenu - | Mode::ToggleSafeMode => panic!("This shouldn't happen?"), + | Mode::SetBootMode => panic!("This shouldn't happen?"), } } @@ -659,7 +659,7 @@ fn build_left_items(app: &App, cur_mode: Mode) -> Action { | Mode::DiagMenu | Mode::InjectDrivers | Mode::PEMenu - | Mode::ToggleSafeMode => panic!("This shouldn't happen?"), + | Mode::SetBootMode => panic!("This shouldn't happen?"), }; Action::UpdateLeft(title, labels, items, select_num) }