diff --git a/crates/lanspread-tauri-deno-ts/src-tauri/src/lib.rs b/crates/lanspread-tauri-deno-ts/src-tauri/src/lib.rs index 1594889..85b773b 100644 --- a/crates/lanspread-tauri-deno-ts/src-tauri/src/lib.rs +++ b/crates/lanspread-tauri-deno-ts/src-tauri/src/lib.rs @@ -6,7 +6,6 @@ use std::{ use eyre::bail; use lanspread_db::db::{Game, GameDB}; -use lanspread_mdns::{LANSPREAD_SERVICE_TYPE, discover_service}; use lanspread_peer::{PeerCommand, PeerEvent, start_peer}; use tauri::{AppHandle, Emitter as _, Manager}; use tauri_plugin_shell::{ShellExt, process::Command}; @@ -391,33 +390,6 @@ fn update_game_directory(app_handle: tauri::AppHandle, path: String) { }); } -async fn find_peers(app: AppHandle) { - log::info!("Looking for peers..."); - - loop { - match discover_service(LANSPREAD_SERVICE_TYPE) { - Ok(peer_addr) => { - log::info!("Found peer at {peer_addr}"); - let state: tauri::State = app.state(); - if state.peer_ctrl.read().await.is_some() { - // Peer discovery is handled by the peer system itself - // No need to establish explicit connections - request_games(state); - } else { - log::warn!( - "Peer system not initialized yet, cannot request games from discovered peer" - ); - } - break; - } - Err(e) => { - log::warn!("Failed to find peers: {e} - retrying..."); - tokio::time::sleep(tokio::time::Duration::from_secs(5)).await; - } - } - } -} - async fn update_game_db(games: Vec, app: AppHandle) { for game in &games { log::trace!("peer event ListGames iter: {game:?}"); @@ -536,14 +508,11 @@ pub fn run() { .setup({ let tx_peer_event_clone = tx_peer_event.clone(); move |app| { - let app_handle = app.handle().clone(); - // discover peers - tauri::async_runtime::spawn(async move { find_peers(app_handle).await }); - - // Initialize peer system when games directory is set + // Initialize peer system ONLY when games directory is set (games directory is mandatory) + // But the UI is responsive immediately - no blocking server discovery let app_handle_clone = app.handle().clone(); tauri::async_runtime::spawn(async move { - // Wait for games directory to be set + // Wait for games directory to be set by user (this is mandatory) loop { let games_folder = { let state = app_handle_clone.state::(); @@ -551,11 +520,15 @@ pub fn run() { }; if !games_folder.is_empty() { + // Only start peer system when we have a valid games directory match start_peer(games_folder, tx_peer_event_clone) { Ok(peer_ctrl) => { let state = app_handle_clone.state::(); *state.peer_ctrl.write().await = Some(peer_ctrl); - log::info!("Peer system initialized successfully"); + log::info!("Peer system initialized successfully with games directory"); + + // Start peer discovery and request games from other peers + request_games(state); } Err(e) => { log::error!("Failed to initialize peer system: {e}"); @@ -564,6 +537,7 @@ pub fn run() { break; } + // Check every 100ms for games directory (non-blocking) tokio::time::sleep(tokio::time::Duration::from_millis(100)).await; } });