|
|
|
|
@ -11,16 +11,23 @@ use commands::{
|
|
|
|
|
events::{emit_to_window, list_windows},
|
|
|
|
|
logger::{app_log, get_log_paths},
|
|
|
|
|
session::{session_clear, session_get, session_set},
|
|
|
|
|
sync::{start_screen_sync, stop_screen_sync},
|
|
|
|
|
sync::{cleanup_screen_sync, start_screen_sync, stop_screen_sync},
|
|
|
|
|
update::{check_apt_update, setup_zyyun_apt_source, upgrade_call_client_via_apt},
|
|
|
|
|
window::{
|
|
|
|
|
close_taxer_info_window, close_ticket_window, ensure_main_window, focus_window,
|
|
|
|
|
open_login_window, open_main_window, open_taxer_info_window, open_ticket_window, quit_app,
|
|
|
|
|
toggle_main_call_window_from_tray,
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
use fs2::FileExt;
|
|
|
|
|
use state::AppState;
|
|
|
|
|
use tauri::Manager;
|
|
|
|
|
use tauri::{
|
|
|
|
|
CustomMenuItem, Manager, SystemTray, SystemTrayEvent, SystemTrayMenu,
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const TRAY_MENU_SHOW_ID: &str = "tray_show_window";
|
|
|
|
|
const TRAY_MENU_TICKETS_ID: &str = "tray_open_ticket_list";
|
|
|
|
|
const TRAY_MENU_QUIT_ID: &str = "tray_quit";
|
|
|
|
|
|
|
|
|
|
#[allow(dead_code)]
|
|
|
|
|
struct SingleInstanceLock(File);
|
|
|
|
|
@ -48,7 +55,37 @@ fn acquire_single_instance_lock(app: &tauri::App) -> Result<SingleInstanceLock,
|
|
|
|
|
|
|
|
|
|
#[cfg_attr(mobile, tauri::mobile_entry_point)]
|
|
|
|
|
pub fn run() {
|
|
|
|
|
let tray_menu = SystemTrayMenu::new()
|
|
|
|
|
.add_item(CustomMenuItem::new(
|
|
|
|
|
TRAY_MENU_SHOW_ID,
|
|
|
|
|
"显示/隐藏叫号窗口",
|
|
|
|
|
))
|
|
|
|
|
.add_item(CustomMenuItem::new(
|
|
|
|
|
TRAY_MENU_TICKETS_ID,
|
|
|
|
|
"打开票号列表",
|
|
|
|
|
))
|
|
|
|
|
.add_item(CustomMenuItem::new(TRAY_MENU_QUIT_ID, "退出"));
|
|
|
|
|
let system_tray = SystemTray::new().with_menu(tray_menu);
|
|
|
|
|
|
|
|
|
|
tauri::Builder::default()
|
|
|
|
|
.system_tray(system_tray)
|
|
|
|
|
.on_system_tray_event(|app, event| match event {
|
|
|
|
|
SystemTrayEvent::DoubleClick { .. } | SystemTrayEvent::LeftClick { .. } => {
|
|
|
|
|
toggle_main_call_window_from_tray(app);
|
|
|
|
|
}
|
|
|
|
|
SystemTrayEvent::MenuItemClick { id, .. } if id.as_str() == TRAY_MENU_SHOW_ID => {
|
|
|
|
|
toggle_main_call_window_from_tray(app);
|
|
|
|
|
}
|
|
|
|
|
SystemTrayEvent::MenuItemClick { id, .. } if id.as_str() == TRAY_MENU_TICKETS_ID => {
|
|
|
|
|
let _ = open_ticket_window(app.clone());
|
|
|
|
|
}
|
|
|
|
|
SystemTrayEvent::MenuItemClick { id, .. } if id.as_str() == TRAY_MENU_QUIT_ID => {
|
|
|
|
|
let state = app.state::<AppState>();
|
|
|
|
|
cleanup_screen_sync(&state);
|
|
|
|
|
app.exit(0);
|
|
|
|
|
}
|
|
|
|
|
_ => {}
|
|
|
|
|
})
|
|
|
|
|
.manage(AppState::default())
|
|
|
|
|
.setup(|app| {
|
|
|
|
|
match acquire_single_instance_lock(app) {
|
|
|
|
|
|