wip
This commit is contained in:
@@ -7,7 +7,7 @@ use std::{
|
||||
use eyre::bail;
|
||||
use lanspread_compat::eti::get_games;
|
||||
use lanspread_db::db::{Game, GameDB};
|
||||
use lanspread_peer::{EtiGamesLoader, PeerCommand, PeerEvent, start_peer_with_eti_loader};
|
||||
use lanspread_peer::{PeerCommand, PeerEvent, start_peer};
|
||||
use tauri::{AppHandle, Emitter as _, Manager};
|
||||
use tauri_plugin_shell::{ShellExt, process::Command};
|
||||
use tokio::sync::{RwLock, mpsc::UnboundedSender};
|
||||
@@ -521,33 +521,39 @@ 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}"))
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
});
|
||||
// Load ETI games from the game.db resource - this MUST succeed
|
||||
let game_db_path = match app_handle_clone.path().resolve("game.db", tauri::path::BaseDirectory::Resource) {
|
||||
Ok(path) => path,
|
||||
Err(e) => {
|
||||
log::error!("Failed to resolve game.db resource: {e}");
|
||||
panic!("game.db resource is mandatory - cannot continue");
|
||||
}
|
||||
};
|
||||
|
||||
let eti_games = match get_games(&game_db_path).await {
|
||||
Ok(games) => {
|
||||
log::info!("Loaded {} ETI games from game.db", games.len());
|
||||
games
|
||||
}
|
||||
Err(e) => {
|
||||
log::error!("Failed to load ETI games: {e}");
|
||||
panic!("game.db resource is mandatory - cannot continue");
|
||||
}
|
||||
};
|
||||
|
||||
// Convert ETI games to GameDB and store in state
|
||||
let games: Vec<Game> = eti_games.into_iter().map(Into::into).collect();
|
||||
{
|
||||
let state = app_handle_clone.state::<LanSpreadState>();
|
||||
*state.games.write().await = GameDB::from(games);
|
||||
}
|
||||
|
||||
// Only start peer system when we have a valid games directory
|
||||
match start_peer_with_eti_loader(games_folder, tx_peer_event_clone, Some(eti_games_loader)) {
|
||||
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 with games directory and ETI loader");
|
||||
log::info!("Peer system initialized successfully with games directory");
|
||||
|
||||
// Start peer discovery and request games from other peers
|
||||
request_games(state);
|
||||
|
||||
Reference in New Issue
Block a user