diff --git a/packages/oneclient_app/src/view/console.rs b/packages/oneclient_app/src/view/console.rs index 21dcf3b4..9351b433 100644 --- a/packages/oneclient_app/src/view/console.rs +++ b/packages/oneclient_app/src/view/console.rs @@ -27,6 +27,8 @@ enum ConsoleWindow { static CONSOLE_WINDOW: Mutex = Mutex::new(ConsoleWindow::Closed); +static PREVIOUS_DIRECTIVES: Mutex> = Mutex::new(None); + pub fn open_log_console() { { let mut state = CONSOLE_WINDOW.lock().expect("console window state"); @@ -40,6 +42,8 @@ pub fn open_log_console() { } } + raise_to_debug(); + // Taken in the caller's scope the future below runs detached and `Platform::get()` needs a component scope let platform = Platform::get(); spawn(async move { @@ -65,9 +69,32 @@ fn window_config() -> WindowConfig { }) .with_on_close(|_, _| { *CONSOLE_WINDOW.lock().expect("console window state") = ConsoleWindow::Closed; + restore_directives(); CloseDecision::Close }) } +fn raise_to_debug() { + let previous = logger::active_directives(); + if previous != logger::default_directives() { + return; + } + + if logger::set_filter(&logger::debug_directives()).is_ok() { + *PREVIOUS_DIRECTIVES.lock().expect("console directives") = Some(previous); + } +} + +fn restore_directives() { + let Some(previous) = PREVIOUS_DIRECTIVES.lock().expect("console directives").take() else { + return; + }; + + if logger::active_directives() != logger::debug_directives() { + return; + } + + let _ = logger::set_filter(&previous); +} struct LogConsoleApp;