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 5b41aed..bb13677 100644 --- a/crates/lanspread-tauri-deno-ts/src-tauri/src/lib.rs +++ b/crates/lanspread-tauri-deno-ts/src-tauri/src/lib.rs @@ -16,12 +16,13 @@ use tokio::sync::{RwLock, mpsc::UnboundedSender}; // Learn more about Tauri commands at https://tauri.app/develop/calling-rust/ +/// Tauri-managed runtime state shared by commands and setup tasks. +#[derive(Default)] struct LanSpreadState { peer_ctrl: Arc>>>, games: Arc>, games_in_download: Arc>>, games_folder: Arc>, - #[allow(dead_code)] peer_game_db: Arc>, } @@ -807,16 +808,6 @@ pub fn run() { // channel to receive events from the peer let (tx_peer_event, mut rx_peer_event) = tokio::sync::mpsc::unbounded_channel::(); - let peer_game_db = Arc::new(RwLock::new(PeerGameDB::new())); - - let lanspread_state = LanSpreadState { - peer_ctrl: Arc::new(RwLock::new(None)), - games: Arc::new(RwLock::new(GameDB::empty())), - games_in_download: Arc::new(RwLock::new(HashSet::new())), - games_folder: Arc::new(RwLock::new(String::new())), - peer_game_db: peer_game_db.clone(), - }; - tauri::Builder::default() .plugin(tauri_plugin_store::Builder::new().build()) .plugin(tauri_plugin_dialog::init()) @@ -831,16 +822,15 @@ pub fn run() { get_peer_count, get_game_thumbnail ]) - .manage(lanspread_state) + .manage(LanSpreadState::default()) .setup({ let tx_peer_event_clone = tx_peer_event.clone(); - let peer_game_db_clone = peer_game_db.clone(); move |app| { // 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(); let tx_peer_event_for_spawn = tx_peer_event_clone.clone(); - let peer_game_db_for_spawn = peer_game_db_clone.clone(); + let peer_game_db_for_spawn = app.state::().peer_game_db.clone(); tauri::async_runtime::spawn(async move { // Wait for games directory to be set by user (this is mandatory) loop {