#![cfg_attr( all(not(debug_assertions), target_os = "windows"), windows_subsystem = "windows" )] use tauri::Manager; mod config; mod errors; mod clientinfo; mod ipc; mod state; mod server; mod tray; use state::AppState; fn main() { let initial_state = match state::AppState::new() { Ok(state) => state, Err(e) => {eprintln!("{}", e); return;} }; tauri::Builder::default() .manage(initial_state) .system_tray(tray::create()) .on_system_tray_event(tray::handle_event) .invoke_handler(tauri::generate_handler![ ipc::unlock, ipc::respond, ipc::get_session_status, ipc::save_credentials, ]) .setup(|app| { let state = app.state::(); let config = state.config.read().unwrap(); let addr = std::net::SocketAddrV4::new(config.listen_addr, config.listen_port); tauri::async_runtime::spawn(server::serve(addr, app.handle())); Ok(()) }) .build(tauri::generate_context!()) .expect("error while running tauri application") .run(|app, run_event| match run_event { tauri::RunEvent::WindowEvent { label, event, .. } => match event { tauri::WindowEvent::CloseRequested { api, .. } => { let _ = app.get_window(&label).map(|w| w.hide()); api.prevent_close(); } _ => () } _ => () }) }