mod agent; #[cfg(target_os = "windows")] mod rustdesk; use agent::{collect_inventory_plain, collect_profile, AgentRuntime, MachineProfile}; use tauri_plugin_store::Builder as StorePluginBuilder; #[derive(Debug, serde::Serialize)] #[serde(rename_all = "camelCase")] pub struct RustdeskProvisioningResult { pub id: String, pub password: String, pub installed_version: Option, pub updated: bool, } #[tauri::command] fn collect_machine_profile() -> Result { collect_profile().map_err(|error| error.to_string()) } #[tauri::command] fn collect_machine_inventory() -> Result { Ok(collect_inventory_plain()) } #[tauri::command] fn start_machine_agent( state: tauri::State, base_url: String, token: String, status: Option, interval_seconds: Option, ) -> Result<(), String> { state .start_heartbeat(base_url, token, status, interval_seconds) .map_err(|error| error.to_string()) } #[tauri::command] fn stop_machine_agent(state: tauri::State) -> Result<(), String> { state.stop(); Ok(()) } #[tauri::command] fn open_devtools(window: tauri::WebviewWindow) -> Result<(), String> { window.open_devtools(); Ok(()) } #[tauri::command] async fn provision_rustdesk(machine_id: Option) -> Result { let machine_id = machine_id .filter(|value| !value.trim().is_empty()) .ok_or_else(|| "Informe o identificador da máquina para provisionar o RustDesk.".to_string())?; tauri::async_runtime::spawn_blocking(move || run_rustdesk_provision(machine_id)) .await .map_err(|error| error.to_string())? } #[cfg(target_os = "windows")] fn run_rustdesk_provision(machine_id: String) -> Result { rustdesk::provision(&machine_id).map_err(|error| error.to_string()) } #[cfg(not(target_os = "windows"))] fn run_rustdesk_provision(_machine_id: String) -> Result { Err("Provisionamento automático do RustDesk está disponível apenas no Windows.".to_string()) } #[cfg_attr(mobile, tauri::mobile_entry_point)] pub fn run() { tauri::Builder::default() .manage(AgentRuntime::new()) .plugin(tauri_plugin_opener::init()) .plugin(StorePluginBuilder::default().build()) .plugin(tauri_plugin_updater::Builder::new().build()) .plugin(tauri_plugin_process::init()) .invoke_handler(tauri::generate_handler![ collect_machine_profile, collect_machine_inventory, start_machine_agent, stop_machine_agent, open_devtools, provision_rustdesk ]) .run(tauri::generate_context!()) .expect("error while running tauri application"); }