From 660e7a874fb5ab768bfb3a08e34e980e60161a1c Mon Sep 17 00:00:00 2001 From: futile Date: Sat, 6 Sep 2025 12:10:38 +0100 Subject: [PATCH] improve reliability of panic hook by moving it to main and always creating its storage path --- src/gui/run.rs | 10 +--------- src/main.rs | 14 ++++++++++++++ src/util/persistent_state.rs | 7 +------ 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/gui/run.rs b/src/gui/run.rs index 50cef21..7ead6a4 100644 --- a/src/gui/run.rs +++ b/src/gui/run.rs @@ -3,21 +3,13 @@ use crate::{ app::{App, WINDOW_SIZE}, tools, }, - util::{log, persistent_state::PersistentState, win}, + util::{persistent_state::PersistentState, win}, }; use eframe::egui; -fn panic_hook(panic_info: &std::panic::PanicHookInfo<'_>) { - let backtrace = std::backtrace::Backtrace::capture(); - let message = format!("{panic_info}\nstack backtrace:\n{backtrace}\n"); - log::log(log::LogLevel::Panic, &message); -} - fn app_creator( cc: &eframe::CreationContext<'_>, ) -> Result, Box> { - // use our own panic hook which logs all panics to a file - std::panic::set_hook(Box::new(panic_hook)); // initialize App early to modify some things before returning it let mut app = Box::new(App::default()); // load previously selected launch platform & settings from persistent state diff --git a/src/main.rs b/src/main.rs index a8ae827..ab9fc9d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,20 @@ mod features; mod gui; mod util; +fn init_storage() { + if !crate::util::consts::path::APP_STORAGE.exists() { + std::fs::create_dir(crate::util::consts::path::APP_STORAGE.as_path()).unwrap(); + } +} + +fn panic_hook(panic_info: &std::panic::PanicHookInfo<'_>) { + let backtrace = std::backtrace::Backtrace::capture(); + let message = format!("{panic_info}\nstack backtrace:\n{backtrace}\n"); + crate::util::log::log(crate::util::log::LogLevel::Panic, &message); +} + fn main() { + init_storage(); + std::panic::set_hook(Box::new(panic_hook)); gui::run::run(); } diff --git a/src/util/persistent_state.rs b/src/util/persistent_state.rs index 1642a2c..652cc88 100644 --- a/src/util/persistent_state.rs +++ b/src/util/persistent_state.rs @@ -19,12 +19,7 @@ impl PersistentState { } pub fn set(&self) { - let config_path = path::APP_CONFIG.as_path(); - let config_path_parent = config_path.parent().unwrap(); - if !config_path_parent.exists() { - fs::create_dir(config_path_parent).unwrap(); - } - let mut config_file = File::create(config_path).unwrap(); + let mut config_file = File::create(path::APP_CONFIG.as_path()).unwrap(); let json = serde_json::to_string_pretty(&self).unwrap(); config_file.write_all(json.as_bytes()).unwrap(); }