dont wait for server
This commit is contained in:
@@ -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;
|
||||
}
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user