use std::{fs, sync::Mutex}; use crossbeam_channel::bounded; use frontend_calls::*; use crate::{osc::OSCMessage, setup::setup, utils::{config::Config, vrchat_builtin_parameters}}; mod frontend_calls; mod osc; mod runtime; mod setup; mod structs; mod utils; #[cfg_attr(mobile, tauri::mobile_entry_point)] #[tokio::main] pub async fn run() { let container_folder = dirs::config_dir().unwrap().join("VRCMacros"); match fs::metadata(&container_folder) { Ok(meta) => { if meta.is_file() { panic!("Cannot launch app as the container path is a file not a directory"); } } Err(_) => { fs::create_dir(&container_folder).unwrap(); } } let conf_file = container_folder.join("conf"); let conf = Config::new(conf_file); static ADDRESSES: Mutex> = Mutex::new(Vec::new()); let mut addresses = ADDRESSES.lock().unwrap(); addresses.append(&mut vrchat_builtin_parameters::get_read_addresses()); drop(addresses); let (runtime_sender, runtime_receiver) = bounded(1024); tauri::Builder::default() .plugin(tauri_plugin_os::init()) .plugin(tauri_plugin_clipboard_manager::init()) .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_opener::init()) .invoke_handler(tauri::generate_handler![ get_addresses::get_addresses, save_graph::save_graph, sync_tab::sync_tab, sync_tab::discard_tab, load_previous_tabs::load_previous_tabs, close_app::close_app, settings::set_hide_editor_on_app_start, settings::get_hide_editor_on_app_start, ]) .manage(conf) .manage(&ADDRESSES) .manage(runtime_sender) .setup(|app| { setup(app, &ADDRESSES, runtime_receiver); Ok(()) }) .run(tauri::generate_context!()) .expect("error while running tauri application"); }