1
0
Fork 0
mirror of https://github.com/jugeeya/UltimateTrainingModpack.git synced 2024-11-20 00:46:34 +00:00

Fix two bugs which caused some OnOffs to work incorrectly (#454)

This commit is contained in:
asimon-1 2022-12-31 15:02:49 -05:00 committed by GitHub
parent 7ec7928c55
commit f35f10e4f4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 30 deletions

View file

@ -69,6 +69,7 @@ const MENU_CONF_PATH: &str = "sd:/TrainingModpack/training_modpack_menu.json";
pub unsafe fn set_menu_from_json(message: &str) { pub unsafe fn set_menu_from_json(message: &str) {
let web_response = serde_json::from_str::<MenuJsonStruct>(message); let web_response = serde_json::from_str::<MenuJsonStruct>(message);
let tui_response = serde_json::from_str::<TrainingModpackMenu>(message); let tui_response = serde_json::from_str::<TrainingModpackMenu>(message);
println!("Received menu message: {message}");
if let Ok(message_json) = web_response { if let Ok(message_json) = web_response {
// Includes both MENU and DEFAULTS_MENU // Includes both MENU and DEFAULTS_MENU
// From Web Applet // From Web Applet
@ -126,6 +127,9 @@ pub fn spawn_menu() {
spawn_web_session(new_web_session(false)); spawn_web_session(new_web_session(false));
} }
} else { } else {
let mut app = QUICK_MENU_APP.lock();
*app = training_mod_tui::App::new(get_menu());
drop(app);
QUICK_MENU_ACTIVE = true; QUICK_MENU_ACTIVE = true;
} }
} }
@ -272,17 +276,26 @@ lazy_static! {
pub unsafe fn quick_menu_loop() { pub unsafe fn quick_menu_loop() {
loop { loop {
std::thread::sleep(std::time::Duration::from_secs(10)); std::thread::sleep(std::time::Duration::from_secs(10));
let mut app = QUICK_MENU_APP.lock();
let backend = training_mod_tui::TestBackend::new(75, 15); let backend = training_mod_tui::TestBackend::new(75, 15);
let mut terminal = training_mod_tui::Terminal::new(backend).unwrap(); let mut terminal = training_mod_tui::Terminal::new(backend).unwrap();
let mut has_slept_millis = 0; let mut has_slept_millis = 0;
let render_frames = 5; let render_frames = 5;
let mut json_response = String::new(); let mut json_response = String::new();
let button_presses = &mut BUTTON_PRESSES; let button_presses = &mut BUTTON_PRESSES;
let mut received_input = true; let mut received_input = true;
loop { loop {
std::thread::sleep(std::time::Duration::from_millis(16));
has_slept_millis += 16;
if has_slept_millis < 16 * render_frames {
continue;
}
has_slept_millis = 0;
if !QUICK_MENU_ACTIVE {
continue;
}
let mut app = QUICK_MENU_APP.lock();
button_presses.a.read_press().then(|| { button_presses.a.read_press().then(|| {
app.on_a(); app.on_a();
received_input = true; received_input = true;
@ -292,7 +305,9 @@ pub unsafe fn quick_menu_loop() {
received_input = true; received_input = true;
if !app.outer_list { if !app.outer_list {
app.on_b() app.on_b()
} else if frame_counter::get_frame_count(QUICK_MENU_FRAME_COUNTER_INDEX) == 0 { } else if frame_counter::get_frame_count(QUICK_MENU_FRAME_COUNTER_INDEX) == 0
&& !json_response.is_empty()
{
// Leave menu. // Leave menu.
QUICK_MENU_ACTIVE = false; QUICK_MENU_ACTIVE = false;
set_menu_from_json(&json_response); set_menu_from_json(&json_response);
@ -323,24 +338,13 @@ pub unsafe fn quick_menu_loop() {
received_input = true; received_input = true;
}); });
std::thread::sleep(std::time::Duration::from_millis(16)); if received_input {
has_slept_millis += 16; terminal
if has_slept_millis < 16 * render_frames { .draw(|f| json_response = training_mod_tui::ui(f, &mut app))
continue; .unwrap();
received_input = false;
} }
drop(app);
has_slept_millis = 16;
if !QUICK_MENU_ACTIVE {
continue;
}
if !received_input {
continue;
}
terminal
.draw(|f| json_response = training_mod_tui::ui(f, &mut app))
.unwrap();
received_input = false;
} }
} }
} }
@ -359,15 +363,7 @@ unsafe fn spawn_web_session(session: WebSession) {
defaults_menu: DEFAULTS_MENU, defaults_menu: DEFAULTS_MENU,
}; };
session.send_json(&message_send); session.send_json(&message_send);
println!(
"[Training Modpack] Sending message:\n{}",
serde_json::to_string_pretty(&message_send).unwrap()
);
let message_recv = session.recv(); let message_recv = session.recv();
println!(
"[Training Modpack] Received menu from web:\n{}",
&message_recv
);
println!("[Training Modpack] Tearing down Training Modpack menu session"); println!("[Training Modpack] Tearing down Training Modpack menu session");
session.exit(); session.exit();
session.wait_for_exit(); session.wait_for_exit();

View file

@ -1295,9 +1295,13 @@ impl<'a> SubMenu<'a> {
let titles = T::to_toggle_strs(); let titles = T::to_toggle_strs();
for i in 0..values.len() { for i in 0..values.len() {
let checked: bool = (values[i] & initial_value) > 0 let checked: bool = (values[i] & initial_value) > 0
|| (!values[i] == 0 && initial_value == &0); || (!values[i] == 0 && initial_value == &0);
instance.add_toggle(values[i], titles[i], checked); instance.add_toggle(values[i], titles[i], checked);
} }
// Select the first option if there's nothing selected atm but it's a single option submenu
if is_single_option && instance.toggles.iter().all(|t| !t.checked) {
instance.toggles[0].checked = true;
}
instance instance
} }
pub fn new_with_slider<S: SliderTrait>( pub fn new_with_slider<S: SliderTrait>(