dont wait for server

This commit is contained in:
2025-11-12 20:28:26 +01:00
parent f046fac303
commit a8235fe52a
@@ -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<LanSpreadState> = 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<Game>, 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::<LanSpreadState>();
@@ -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::<LanSpreadState>();
*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;
}
});