diff --git a/pages/library.vue b/pages/library.vue index dcb0b84..c91ea64 100644 --- a/pages/library.vue +++ b/pages/library.vue @@ -13,7 +13,7 @@ >
diff --git a/src-tauri/src/db.rs b/src-tauri/src/db.rs index 74536dc..66d08b5 100644 --- a/src-tauri/src/db.rs +++ b/src-tauri/src/db.rs @@ -35,6 +35,7 @@ pub enum DatabaseGameStatus { #[serde(rename_all = "camelCase")] pub struct DatabaseGames { pub install_dirs: Vec, + // Guaranteed to exist if the game also exists in the app state map pub games_statuses: HashMap, } diff --git a/src-tauri/src/downloads/download_agent.rs b/src-tauri/src/downloads/download_agent.rs index 0bb3b71..9987436 100644 --- a/src-tauri/src/downloads/download_agent.rs +++ b/src-tauri/src/downloads/download_agent.rs @@ -212,7 +212,7 @@ impl GameDownloadAgent { } pub fn run(&self) -> Result<(), ()> { - const DOWNLOAD_MAX_THREADS: usize = 4; + const DOWNLOAD_MAX_THREADS: usize = 1; let pool = ThreadPoolBuilder::new() .num_threads(DOWNLOAD_MAX_THREADS) diff --git a/src-tauri/src/library.rs b/src-tauri/src/library.rs index 3fbea71..64372b8 100644 --- a/src-tauri/src/library.rs +++ b/src-tauri/src/library.rs @@ -1,3 +1,4 @@ +use std::fmt::format; use std::sync::Mutex; use log::info; @@ -8,6 +9,7 @@ use tauri::{AppHandle, Manager}; use crate::db; use crate::db::DatabaseGameStatus; use crate::db::DatabaseImpls; +use crate::downloads::download_manager::GameDownloadStatus; use crate::remote::RemoteAccessError; use crate::{auth::generate_authorization_header, AppState, DB}; @@ -77,9 +79,9 @@ pub fn fetch_library(app: AppHandle) -> Result { fn fetch_game_logic(id: String, app: tauri::AppHandle) -> Result { let state = app.state::>(); - let handle = state.lock().unwrap(); + let mut state_handle = state.lock().unwrap(); - let game = handle.games.get(&id); + let game = state_handle.games.get(&id); if let Some(game) = game { let db_handle = DB.borrow_data().unwrap(); @@ -95,9 +97,50 @@ fn fetch_game_logic(id: String, app: tauri::AppHandle) -> Result()?; + state_handle.games.insert(id.clone(), game.clone()); + + let mut db_handle = DB.borrow_data_mut().unwrap(); + + if !db_handle.games.games_statuses.contains_key(&id) { + db_handle + .games + .games_statuses + .insert(id, DatabaseGameStatus::Remote); + } + + let data = FetchGameStruct { + game: game.clone(), + status: db_handle + .games + .games_statuses + .get(&game.id) + .unwrap() + .clone(), + }; + + return Ok(json!(data).to_string()); } #[tauri::command]