load game.db

This commit is contained in:
2025-11-12 22:56:59 +01:00
parent 379a1bbfe9
commit 0f4e40383b
7 changed files with 117 additions and 27 deletions
@@ -5,8 +5,9 @@ use std::{
};
use eyre::bail;
use lanspread_compat::eti::get_games;
use lanspread_db::db::{Game, GameDB};
use lanspread_peer::{PeerCommand, PeerEvent, start_peer};
use lanspread_peer::{EtiGamesLoader, PeerCommand, PeerEvent, start_peer_with_eti_loader};
use tauri::{AppHandle, Emitter as _, Manager};
use tauri_plugin_shell::{ShellExt, process::Command};
use tokio::sync::{RwLock, mpsc::UnboundedSender};
@@ -520,12 +521,33 @@ pub fn run() {
};
if !games_folder.is_empty() {
// Create ETI games loader that can access the Tauri resource
let app_handle_for_loader = app_handle_clone.clone();
let eti_games_loader: EtiGamesLoader = Arc::new(move || {
let app_handle = app_handle_for_loader.clone();
// Use tokio's block_in_place to call async function from sync context
tokio::task::block_in_place(move || {
tokio::runtime::Handle::current().block_on(async move {
// Resolve the game.db resource path
match app_handle.path().resolve("game.db", tauri::path::BaseDirectory::Resource) {
Ok(game_db_path) => {
get_games(&game_db_path).await
}
Err(e) => {
log::error!("Failed to resolve game.db resource: {e}");
Err(eyre::eyre!("Failed to resolve game.db resource: {e}"))
}
}
})
})
});
// Only start peer system when we have a valid games directory
match start_peer(games_folder, tx_peer_event_clone) {
match start_peer_with_eti_loader(games_folder, tx_peer_event_clone, Some(eti_games_loader)) {
Ok(peer_ctrl) => {
let state = app_handle_clone.state::<LanSpreadState>();
*state.peer_ctrl.write().await = Some(peer_ctrl);
log::info!("Peer system initialized successfully with games directory");
log::info!("Peer system initialized successfully with games directory and ETI loader");
// Start peer discovery and request games from other peers
request_games(state);