feat: event-driven rustdesk sync
This commit is contained in:
parent
e410a4874c
commit
e0bb6bb80f
4 changed files with 263 additions and 96 deletions
|
|
@ -3,6 +3,7 @@ mod agent;
|
|||
mod rustdesk;
|
||||
|
||||
use agent::{collect_inventory_plain, collect_profile, AgentRuntime, MachineProfile};
|
||||
use tauri::Emitter;
|
||||
use tauri_plugin_store::Builder as StorePluginBuilder;
|
||||
|
||||
#[derive(Debug, serde::Serialize)]
|
||||
|
|
@ -12,6 +13,7 @@ pub struct RustdeskProvisioningResult {
|
|||
pub password: String,
|
||||
pub installed_version: Option<String>,
|
||||
pub updated: bool,
|
||||
pub last_provisioned_at: i64,
|
||||
}
|
||||
|
||||
#[tauri::command]
|
||||
|
|
@ -50,22 +52,45 @@ fn open_devtools(window: tauri::WebviewWindow) -> Result<(), String> {
|
|||
}
|
||||
|
||||
#[tauri::command]
|
||||
async fn provision_rustdesk(machine_id: Option<String>) -> Result<RustdeskProvisioningResult, String> {
|
||||
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())?
|
||||
async fn ensure_rustdesk_and_emit(
|
||||
app: tauri::AppHandle,
|
||||
config_string: Option<String>,
|
||||
password: Option<String>,
|
||||
machine_id: Option<String>,
|
||||
) -> Result<RustdeskProvisioningResult, String> {
|
||||
let result = tauri::async_runtime::spawn_blocking(move || {
|
||||
run_rustdesk_ensure(config_string, password, machine_id)
|
||||
})
|
||||
.await
|
||||
.map_err(|error| error.to_string())??;
|
||||
|
||||
if let Err(error) = app.emit("raven://remote-access/provisioned", &result) {
|
||||
eprintln!("[rustdesk] falha ao emitir evento raven://remote-access/provisioned: {error}");
|
||||
}
|
||||
|
||||
Ok(result)
|
||||
}
|
||||
|
||||
#[cfg(target_os = "windows")]
|
||||
fn run_rustdesk_provision(machine_id: String) -> Result<RustdeskProvisioningResult, String> {
|
||||
rustdesk::provision(&machine_id).map_err(|error| error.to_string())
|
||||
fn run_rustdesk_ensure(
|
||||
config_string: Option<String>,
|
||||
password: Option<String>,
|
||||
machine_id: Option<String>,
|
||||
) -> Result<RustdeskProvisioningResult, String> {
|
||||
rustdesk::ensure_rustdesk(
|
||||
config_string.as_deref(),
|
||||
password.as_deref(),
|
||||
machine_id.as_deref(),
|
||||
)
|
||||
.map_err(|error| error.to_string())
|
||||
}
|
||||
|
||||
#[cfg(not(target_os = "windows"))]
|
||||
fn run_rustdesk_provision(_machine_id: String) -> Result<RustdeskProvisioningResult, String> {
|
||||
fn run_rustdesk_ensure(
|
||||
_config_string: Option<String>,
|
||||
_password: Option<String>,
|
||||
_machine_id: Option<String>,
|
||||
) -> Result<RustdeskProvisioningResult, String> {
|
||||
Err("Provisionamento automático do RustDesk está disponível apenas no Windows.".to_string())
|
||||
}
|
||||
|
||||
|
|
@ -83,7 +108,7 @@ pub fn run() {
|
|||
start_machine_agent,
|
||||
stop_machine_agent,
|
||||
open_devtools,
|
||||
provision_rustdesk
|
||||
ensure_rustdesk_and_emit
|
||||
])
|
||||
.run(tauri::generate_context!())
|
||||
.expect("error while running tauri application");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue