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 tokio::sync::mpsc;
|
||||||
use tracing::{debug, info};
|
use tracing::{debug, info};
|
||||||
|
|
||||||
|
#[derive(Clone, Debug, Default)]
|
||||||
|
pub enum SafeMode {
|
||||||
|
#[default]
|
||||||
|
Disable,
|
||||||
|
Enable,
|
||||||
|
}
|
||||||
|
|
||||||
pub struct App {
|
pub struct App {
|
||||||
// TUI
|
// TUI
|
||||||
action_rx: mpsc::UnboundedReceiver<Action>,
|
action_rx: mpsc::UnboundedReceiver<Action>,
|
||||||
|
|
@ -56,6 +63,7 @@ pub struct App {
|
||||||
clone: CloneSettings,
|
clone: CloneSettings,
|
||||||
cur_mode: Mode,
|
cur_mode: Mode,
|
||||||
list: StatefulList<Mode>,
|
list: StatefulList<Mode>,
|
||||||
|
boot_modes: Vec<SafeMode>,
|
||||||
selections: Vec<Option<usize>>,
|
selections: Vec<Option<usize>>,
|
||||||
tasks: Tasks,
|
tasks: Tasks,
|
||||||
}
|
}
|
||||||
|
|
@ -70,7 +78,7 @@ impl App {
|
||||||
Mode::BootDiags,
|
Mode::BootDiags,
|
||||||
Mode::BootSetup,
|
Mode::BootSetup,
|
||||||
Mode::InjectDrivers,
|
Mode::InjectDrivers,
|
||||||
Mode::ToggleSafeMode,
|
Mode::SetBootMode,
|
||||||
]);
|
]);
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
// TUI
|
// TUI
|
||||||
|
|
@ -94,6 +102,7 @@ impl App {
|
||||||
clone: CloneSettings::new(disk_list_arc),
|
clone: CloneSettings::new(disk_list_arc),
|
||||||
cur_mode: Mode::Home,
|
cur_mode: Mode::Home,
|
||||||
list,
|
list,
|
||||||
|
boot_modes: vec![SafeMode::Enable, SafeMode::Disable],
|
||||||
selections: vec![None, None],
|
selections: vec![None, None],
|
||||||
tasks,
|
tasks,
|
||||||
})
|
})
|
||||||
|
|
@ -106,7 +115,7 @@ impl App {
|
||||||
Mode::ScanDisks => Mode::SelectDisks,
|
Mode::ScanDisks => Mode::SelectDisks,
|
||||||
Mode::SelectDisks => Mode::SelectParts,
|
Mode::SelectDisks => Mode::SelectParts,
|
||||||
Mode::SelectParts => Mode::DiagMenu,
|
Mode::SelectParts => Mode::DiagMenu,
|
||||||
Mode::BootDiags | Mode::BootSetup | Mode::InjectDrivers | Mode::ToggleSafeMode => {
|
Mode::BootDiags | Mode::BootSetup | Mode::InjectDrivers | Mode::SetBootMode => {
|
||||||
Mode::DiagMenu
|
Mode::DiagMenu
|
||||||
}
|
}
|
||||||
Mode::Failed => Mode::Failed,
|
Mode::Failed => Mode::Failed,
|
||||||
|
|
@ -263,10 +272,7 @@ impl App {
|
||||||
self.action_tx.send(Action::SetMode(new_mode))?;
|
self.action_tx.send(Action::SetMode(new_mode))?;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Mode::BootDiags
|
Mode::BootDiags | Mode::BootSetup | Mode::InjectDrivers => {
|
||||||
| Mode::BootSetup
|
|
||||||
| Mode::InjectDrivers
|
|
||||||
| Mode::ToggleSafeMode => {
|
|
||||||
let new_mode = self.next_mode();
|
let new_mode = self.next_mode();
|
||||||
self.action_tx.send(Action::SetMode(new_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_boot = one;
|
||||||
self.clone.part_index_os = two;
|
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) => {
|
Action::SetMode(new_mode) => {
|
||||||
|
|
@ -395,13 +407,10 @@ fn get_chunks(r: Rect) -> Vec<Rect> {
|
||||||
|
|
||||||
fn build_footer_string(cur_mode: Mode) -> String {
|
fn build_footer_string(cur_mode: Mode) -> String {
|
||||||
match cur_mode {
|
match cur_mode {
|
||||||
Mode::BootDiags
|
Mode::BootDiags | Mode::BootSetup | Mode::Home | Mode::PEMenu | Mode::ScanDisks => {
|
||||||
| Mode::BootSetup
|
String::from("(q) to quit")
|
||||||
| Mode::Home
|
}
|
||||||
| Mode::PEMenu
|
Mode::InstallDrivers | Mode::InjectDrivers | Mode::SetBootMode => {
|
||||||
| Mode::ScanDisks
|
|
||||||
| Mode::ToggleSafeMode => String::from("(q) to quit"),
|
|
||||||
Mode::InstallDrivers | Mode::InjectDrivers => {
|
|
||||||
String::from("(Enter) to select / (q) to quit")
|
String::from("(Enter) to select / (q) to quit")
|
||||||
}
|
}
|
||||||
Mode::DiagMenu | Mode::SelectParts => {
|
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;
|
select_num = 0;
|
||||||
let (new_title, _) = get_mode_strings(app.cur_mode);
|
let (new_title, _) = get_mode_strings(app.cur_mode);
|
||||||
title = new_title;
|
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 => {
|
Mode::Done | Mode::Failed => {
|
||||||
select_num = 0;
|
select_num = 0;
|
||||||
title = String::from("Done");
|
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)
|
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"),
|
||||||
String::from("Inject drivers into existing Windows environment"),
|
String::from("Inject drivers into existing Windows environment"),
|
||||||
),
|
),
|
||||||
Mode::ToggleSafeMode => (
|
Mode::SetBootMode => (
|
||||||
String::from("Toggle Safe Mode"),
|
String::from("Toggle Safe Mode"),
|
||||||
String::from("Enable or disable safe mode"),
|
String::from("Enable or disable safe mode"),
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -132,7 +132,7 @@
|
||||||
"<Ctrl-c>": "Quit",
|
"<Ctrl-c>": "Quit",
|
||||||
"<Ctrl-z>": "Suspend"
|
"<Ctrl-z>": "Suspend"
|
||||||
},
|
},
|
||||||
"ToggleSafeMode": {
|
"SetBootMode": {
|
||||||
"<Enter>": "Process",
|
"<Enter>": "Process",
|
||||||
"<Up>": "KeyUp",
|
"<Up>": "KeyUp",
|
||||||
"<Down>": "KeyDown",
|
"<Down>": "KeyDown",
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ pub enum Mode {
|
||||||
BootDiags,
|
BootDiags,
|
||||||
BootSetup,
|
BootSetup,
|
||||||
InjectDrivers,
|
InjectDrivers,
|
||||||
ToggleSafeMode,
|
SetBootMode,
|
||||||
// Clone
|
// Clone
|
||||||
ScanDisks,
|
ScanDisks,
|
||||||
InstallDrivers,
|
InstallDrivers,
|
||||||
|
|
|
||||||
|
|
@ -120,7 +120,7 @@ impl App {
|
||||||
| Mode::DiagMenu
|
| Mode::DiagMenu
|
||||||
| Mode::InjectDrivers
|
| Mode::InjectDrivers
|
||||||
| Mode::PEMenu
|
| Mode::PEMenu
|
||||||
| Mode::ToggleSafeMode => panic!("This shouldn't happen?"),
|
| Mode::SetBootMode => panic!("This shouldn't happen?"),
|
||||||
};
|
};
|
||||||
new_mode
|
new_mode
|
||||||
}
|
}
|
||||||
|
|
@ -144,7 +144,7 @@ impl App {
|
||||||
| Mode::DiagMenu
|
| Mode::DiagMenu
|
||||||
| Mode::InjectDrivers
|
| Mode::InjectDrivers
|
||||||
| Mode::PEMenu
|
| Mode::PEMenu
|
||||||
| Mode::ToggleSafeMode => panic!("This shouldn't happen?"),
|
| Mode::SetBootMode => panic!("This shouldn't happen?"),
|
||||||
};
|
};
|
||||||
|
|
||||||
if new_mode == self.cur_mode {
|
if new_mode == self.cur_mode {
|
||||||
|
|
@ -589,7 +589,7 @@ fn build_footer_string(cur_mode: Mode) -> String {
|
||||||
| Mode::DiagMenu
|
| Mode::DiagMenu
|
||||||
| Mode::InjectDrivers
|
| Mode::InjectDrivers
|
||||||
| Mode::PEMenu
|
| 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::DiagMenu
|
||||||
| Mode::InjectDrivers
|
| Mode::InjectDrivers
|
||||||
| Mode::PEMenu
|
| Mode::PEMenu
|
||||||
| Mode::ToggleSafeMode => panic!("This shouldn't happen?"),
|
| Mode::SetBootMode => panic!("This shouldn't happen?"),
|
||||||
};
|
};
|
||||||
Action::UpdateLeft(title, labels, items, select_num)
|
Action::UpdateLeft(title, labels, items, select_num)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue