WIP: Add BootMode menu logic
This commit is contained in:
parent
aa4ac8d5e8
commit
1ce7f76229
4 changed files with 55 additions and 21 deletions
|
|
@ -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<Action>,
|
||||
|
|
@ -56,6 +63,7 @@ pub struct App {
|
|||
clone: CloneSettings,
|
||||
cur_mode: Mode,
|
||||
list: StatefulList<Mode>,
|
||||
boot_modes: Vec<SafeMode>,
|
||||
selections: Vec<Option<usize>>,
|
||||
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<Rect> {
|
|||
|
||||
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"),
|
||||
),
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@
|
|||
"<Ctrl-c>": "Quit",
|
||||
"<Ctrl-z>": "Suspend"
|
||||
},
|
||||
"ToggleSafeMode": {
|
||||
"SetBootMode": {
|
||||
"<Enter>": "Process",
|
||||
"<Up>": "KeyUp",
|
||||
"<Down>": "KeyDown",
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ pub enum Mode {
|
|||
BootDiags,
|
||||
BootSetup,
|
||||
InjectDrivers,
|
||||
ToggleSafeMode,
|
||||
SetBootMode,
|
||||
// Clone
|
||||
ScanDisks,
|
||||
InstallDrivers,
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue