mod commands;
use std::sync::Arc;
use tauri::{Emitter, Manager};
const APP_EVENT: &str = "studio-app-event";
#[cfg_attr(mobile, tauri::mobile_entry_point)]
pub fn run() {
studio_carriers::probe::init_hid_on_main_thread();
tauri::Builder::default()
.plugin(tauri_plugin_opener::init())
.plugin(tauri_plugin_dialog::init())
.manage::<commands::App>(Arc::new(studio_app::StudioApp::new()))
.setup(|app| {
let studio = app.state::<commands::App>().inner().clone();
if let Ok(dir) = app.path().app_data_dir() {
studio.set_recordings_dir(dir.join("recordings"));
}
if let Ok(dir) = app.path().resource_dir() {
let name = if cfg!(target_os = "macos") {
"libdm_device.dylib"
} else if cfg!(windows) {
"dm_device.dll"
} else {
"libdm_device.so"
};
let library = dir.join(name);
if library.is_file() {
studio.set_can_library(library);
}
}
let handle = app.handle().clone();
studio.set_event_sink(Arc::new(move |event| {
let _ = handle.emit(APP_EVENT, event);
}));
Ok(())
})
.invoke_handler(tauri::generate_handler![
commands::can_request,
commands::open_elf,
commands::symbol_children,
commands::startup_elf_path,
commands::list_probes,
commands::search_chips,
commands::session_connect,
commands::session_disconnect,
commands::session_set_watches,
commands::session_set_rate,
commands::session_request,
commands::session_discard,
commands::session_save,
commands::list_serial_ports,
commands::watchable_leaves,
commands::session_task_states,
commands::session_task_trace,
commands::inspect_children,
commands::node_metadata,
commands::session_read_values,
commands::recording_start,
commands::recording_stop,
commands::export_csv,
commands::stream_start,
commands::stream_stop,
commands::app_state,
])
.build(tauri::generate_context!())
.expect("error while building tauri application")
.run(|app, event| {
if let tauri::RunEvent::Exit = event {
let studio = app.state::<commands::App>();
let _ = studio.can_request(studio_app::can::Request::Disconnect);
studio.disconnect();
studio.stop_stream();
}
});
}