//! Flash Send 应用入口 //! 跨平台局域网文件传输与聊天应用 #![cfg_attr(not(debug_assertions), windows_subsystem = "windows")] use flash_send_lib::{ database::Database, tls::CertificateManager, utils::{AppConfig, configure_firewall}, AppState, get_handlers, }; use std::path::PathBuf; use tauri::Manager; fn main() { // 初始化日志 env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")) .format_timestamp_millis() .init(); log::info!("Starting Flash Send application"); tauri::Builder::default() .plugin(tauri_plugin_dialog::init()) .plugin(tauri_plugin_fs::init()) .plugin(tauri_plugin_shell::init()) .setup(|app| { let app_data_dir = app .path() .app_data_dir() .unwrap_or_else(|_| PathBuf::from(".")); log::info!("App data directory: {:?}", app_data_dir); // 初始化应用状态 AppState::init(app_data_dir.clone()) .expect("Failed to initialize app state"); // 初始化数据库 Database::init(app_data_dir.clone()) .expect("Failed to initialize database"); // 获取本机 IP 并初始化 TLS 证书 let config = AppConfig::get(); let ip_addresses = local_ip_address::local_ip() .map(|ip| vec![ip.to_string()]) .unwrap_or_default(); CertificateManager::init(&app_data_dir, &config.device_id, ip_addresses) .expect("Failed to initialize TLS certificate"); // 配置防火墙规则(Windows) configure_firewall( "Flash Send", config.udp_port, config.ws_port, config.http_port, ); log::info!("Application initialized successfully"); log::info!("Device ID: {}", config.device_id); log::info!("Device Name: {}", config.device_name); Ok(()) }) .invoke_handler(get_handlers()) .run(tauri::generate_context!()) .expect("Error while running Flash Send application"); }