feat(raven): adiciona tray, hide-on-close e autostart no Windows
This commit is contained in:
parent
e8b58187c9
commit
06bb1133a8
2 changed files with 82 additions and 2 deletions
|
|
@ -18,7 +18,7 @@ crate-type = ["staticlib", "cdylib", "rlib"]
|
||||||
tauri-build = { version = "2.4.1", features = [] }
|
tauri-build = { version = "2.4.1", features = [] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
tauri = { version = "2.8.5", features = ["wry", "devtools"] }
|
tauri = { version = "2.8.5", features = ["wry", "devtools", "tray-icon"] }
|
||||||
tauri-plugin-opener = "2.5.0"
|
tauri-plugin-opener = "2.5.0"
|
||||||
tauri-plugin-store = "2.4.0"
|
tauri-plugin-store = "2.4.0"
|
||||||
tauri-plugin-updater = "2.9.0"
|
tauri-plugin-updater = "2.9.0"
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,14 @@ mod agent;
|
||||||
mod rustdesk;
|
mod rustdesk;
|
||||||
|
|
||||||
use agent::{collect_inventory_plain, collect_profile, AgentRuntime, MachineProfile};
|
use agent::{collect_inventory_plain, collect_profile, AgentRuntime, MachineProfile};
|
||||||
use tauri::Emitter;
|
use tauri::{Emitter, Manager, WindowEvent};
|
||||||
use tauri_plugin_store::Builder as StorePluginBuilder;
|
use tauri_plugin_store::Builder as StorePluginBuilder;
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
use std::process::Command;
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
use tauri::menu::{MenuBuilder, MenuItemBuilder};
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
use tauri::tray::TrayIconBuilder;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize)]
|
#[derive(Debug, serde::Serialize)]
|
||||||
#[serde(rename_all = "camelCase")]
|
#[serde(rename_all = "camelCase")]
|
||||||
|
|
@ -102,6 +108,20 @@ pub fn run() {
|
||||||
.plugin(StorePluginBuilder::default().build())
|
.plugin(StorePluginBuilder::default().build())
|
||||||
.plugin(tauri_plugin_updater::Builder::new().build())
|
.plugin(tauri_plugin_updater::Builder::new().build())
|
||||||
.plugin(tauri_plugin_process::init())
|
.plugin(tauri_plugin_process::init())
|
||||||
|
.on_window_event(|window, event| {
|
||||||
|
if let WindowEvent::CloseRequested { api, .. } = event {
|
||||||
|
api.prevent_close();
|
||||||
|
let _ = window.hide();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setup(|app| {
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
{
|
||||||
|
setup_raven_autostart();
|
||||||
|
setup_tray(app)?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
})
|
||||||
.invoke_handler(tauri::generate_handler![
|
.invoke_handler(tauri::generate_handler![
|
||||||
collect_machine_profile,
|
collect_machine_profile,
|
||||||
collect_machine_inventory,
|
collect_machine_inventory,
|
||||||
|
|
@ -113,3 +133,63 @@ pub fn run() {
|
||||||
.run(tauri::generate_context!())
|
.run(tauri::generate_context!())
|
||||||
.expect("error while running tauri application");
|
.expect("error while running tauri application");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
fn setup_raven_autostart() {
|
||||||
|
if let Ok(exe) = std::env::current_exe() {
|
||||||
|
let path = exe.display().to_string();
|
||||||
|
let quoted = format!("\"{}\"", path);
|
||||||
|
let _ = Command::new("cmd")
|
||||||
|
.args([
|
||||||
|
"/C",
|
||||||
|
"reg",
|
||||||
|
"add",
|
||||||
|
r"HKCU\Software\Microsoft\Windows\CurrentVersion\Run",
|
||||||
|
"/v",
|
||||||
|
"Raven",
|
||||||
|
"/d",
|
||||||
|
"ed,
|
||||||
|
"/f",
|
||||||
|
])
|
||||||
|
.status();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(target_os = "windows")]
|
||||||
|
fn setup_tray(app: &tauri::AppHandle) -> tauri::Result<()> {
|
||||||
|
let show_item = MenuItemBuilder::with_id("show", "Mostrar").build(app)?;
|
||||||
|
let quit_item = MenuItemBuilder::with_id("quit", "Sair").build(app)?;
|
||||||
|
let menu = MenuBuilder::new(app).items(&[&show_item, &quit_item])?.build()?;
|
||||||
|
|
||||||
|
let mut builder = TrayIconBuilder::new()
|
||||||
|
.menu(&menu)
|
||||||
|
.on_menu_event(|tray, event| {
|
||||||
|
match event.id().as_ref() {
|
||||||
|
"show" => {
|
||||||
|
if let Some(win) = tray.app_handle().get_webview_window("main") {
|
||||||
|
let _ = win.show();
|
||||||
|
let _ = win.set_focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"quit" => {
|
||||||
|
tray.app_handle().exit(0);
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.on_tray_icon_event(|tray, event| {
|
||||||
|
if let tauri::tray::TrayIconEvent::DoubleClick { .. } = event {
|
||||||
|
if let Some(win) = tray.app_handle().get_webview_window("main") {
|
||||||
|
let _ = win.show();
|
||||||
|
let _ = win.set_focus();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if let Some(icon) = app.default_window_icon() {
|
||||||
|
builder = builder.icon(icon.clone());
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.build(app)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue