mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-21 19:38:12 +08:00
* Fix panic dialogue when handling a message * Fix indents for github reporting * More whitespace improvements
48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
pub mod api;
|
|
pub mod helpers;
|
|
pub mod logging;
|
|
pub mod type_translators;
|
|
|
|
use editor::message_prelude::*;
|
|
|
|
use logging::WasmLog;
|
|
use std::cell::RefCell;
|
|
use std::collections::HashMap;
|
|
use std::panic;
|
|
use std::sync::atomic::AtomicBool;
|
|
use wasm_bindgen::prelude::*;
|
|
|
|
// Set up the persistent editor backend state
|
|
pub static EDITOR_HAS_CRASHED: AtomicBool = AtomicBool::new(false);
|
|
pub static LOGGER: WasmLog = WasmLog;
|
|
thread_local! {
|
|
pub static EDITOR_INSTANCES: RefCell<HashMap<u64, editor::Editor>> = RefCell::new(HashMap::new());
|
|
pub static JS_EDITOR_HANDLES: RefCell<HashMap<u64, api::JsEditorHandle>> = RefCell::new(HashMap::new());
|
|
}
|
|
|
|
// Initialize the backend
|
|
#[wasm_bindgen(start)]
|
|
pub fn init() {
|
|
panic::set_hook(Box::new(panic_hook));
|
|
|
|
log::set_logger(&LOGGER).expect("Failed to set logger");
|
|
log::set_max_level(log::LevelFilter::Debug);
|
|
}
|
|
|
|
// When a panic occurs, close up shop before the backend dies
|
|
fn panic_hook(info: &panic::PanicInfo) {
|
|
let panic_info = info.to_string();
|
|
let title = "The editor crashed — sorry about that".to_string();
|
|
let description = "An internal error occurred. Reload the editor to continue. Please report this by filing an issue on GitHub.".to_string();
|
|
log::error!("{}", info);
|
|
JS_EDITOR_HANDLES.with(|instances| {
|
|
instances.borrow_mut().values_mut().for_each(|instance| {
|
|
instance.handle_response_rust_proxy(FrontendMessage::DisplayDialogPanic {
|
|
panic_info: panic_info.clone(),
|
|
title: title.clone(),
|
|
description: description.clone(),
|
|
})
|
|
})
|
|
});
|
|
}
|