From ec0f0a92f8387f4c6d8b314536bc3acdcae56c66 Mon Sep 17 00:00:00 2001 From: GeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com> Date: Sat, 13 May 2023 12:56:44 +0200 Subject: refactor: Move `find_game_install_location` to submodule (#350) --- src-tauri/src/northstar/install.rs | 45 +++++++++++++++++++++++++++++++++++++- 1 file changed, 44 insertions(+), 1 deletion(-) (limited to 'src-tauri/src/northstar/install.rs') diff --git a/src-tauri/src/northstar/install.rs b/src-tauri/src/northstar/install.rs index 7de49eb5..94029350 100644 --- a/src-tauri/src/northstar/install.rs +++ b/src-tauri/src/northstar/install.rs @@ -4,7 +4,11 @@ use std::time::Duration; use std::{cell::RefCell, time::Instant}; use ts_rs::TS; -use crate::extract; +use crate::constants::TITANFALL2_STEAM_ID; +use crate::{extract, GameInstall, InstallType}; + +#[cfg(target_os = "windows")] +use crate::platform_specific::windows; #[derive(Serialize, Deserialize, Debug, Clone, TS)] #[ts(export)] @@ -142,3 +146,42 @@ pub async fn install_northstar( Ok(nmod.latest.clone()) } + +/// Attempts to find the game install location +pub fn find_game_install_location() -> Result { + // Attempt parsing Steam library directly + match steamlocate::SteamDir::locate() { + Some(mut steamdir) => { + let titanfall2_steamid = TITANFALL2_STEAM_ID.parse().unwrap(); + match steamdir.app(&titanfall2_steamid) { + Some(app) => { + // println!("{:#?}", app); + let game_install = GameInstall { + game_path: app.path.to_str().unwrap().to_string(), + install_type: InstallType::STEAM, + }; + return Ok(game_install); + } + None => log::info!("Couldn't locate Titanfall2 Steam install"), + } + } + None => log::info!("Couldn't locate Steam on this computer!"), + } + + // (On Windows only) try parsing Windows registry for Origin install path + #[cfg(target_os = "windows")] + match windows::origin_install_location_detection() { + Ok(game_path) => { + let game_install = GameInstall { + game_path, + install_type: InstallType::ORIGIN, + }; + return Ok(game_install); + } + Err(err) => { + log::info!("{}", err); + } + }; + + Err("Could not auto-detect game install location! Please enter it manually.".to_string()) +} -- cgit v1.2.3