aboutsummaryrefslogtreecommitdiff
path: root/src-tauri/src/northstar/mod.rs
diff options
context:
space:
mode:
authorGeckoEidechse <40122905+GeckoEidechse@users.noreply.github.com>2023-05-09 19:22:08 +0200
committerGitHub <noreply@github.com>2023-05-09 19:22:08 +0200
commita01dc91a7e5cb515c33dc08a2f41ae9d91310cc7 (patch)
treebb8b25d437d12aa768f46b7d6be1d932c21c7ab9 /src-tauri/src/northstar/mod.rs
parentf216d4dbe521f324b514d0485425c4a1a1332588 (diff)
downloadFlightCore-a01dc91a7e5cb515c33dc08a2f41ae9d91310cc7.tar.gz
FlightCore-a01dc91a7e5cb515c33dc08a2f41ae9d91310cc7.zip
refactor: Move `launch_northstar` to own module (#338)
Part of #329
Diffstat (limited to 'src-tauri/src/northstar/mod.rs')
-rw-r--r--src-tauri/src/northstar/mod.rs68
1 files changed, 68 insertions, 0 deletions
diff --git a/src-tauri/src/northstar/mod.rs b/src-tauri/src/northstar/mod.rs
index 7bd0b0a3..d26ecb64 100644
--- a/src-tauri/src/northstar/mod.rs
+++ b/src-tauri/src/northstar/mod.rs
@@ -3,6 +3,7 @@
use crate::{check_mod_version_number, constants::CORE_MODS};
use anyhow::anyhow;
+use app::{check_origin_running, get_host_os, GameInstall, InstallType};
/// Returns the current Northstar version number as a string
pub fn get_northstar_version_number(game_path: &str) -> Result<String, anyhow::Error> {
@@ -35,3 +36,70 @@ pub fn get_northstar_version_number(game_path: &str) -> Result<String, anyhow::E
Ok(initial_version_number)
}
+
+pub fn launch_northstar(
+ game_install: &GameInstall,
+ bypass_checks: Option<bool>,
+) -> Result<String, String> {
+ dbg!(game_install.clone());
+
+ let host_os = get_host_os();
+
+ // Explicitly fail early certain (currently) unsupported install setups
+ if host_os != "windows"
+ || !(matches!(game_install.install_type, InstallType::STEAM)
+ || matches!(game_install.install_type, InstallType::ORIGIN)
+ || matches!(game_install.install_type, InstallType::UNKNOWN))
+ {
+ return Err(format!(
+ "Not yet implemented for \"{}\" with Titanfall2 installed via \"{:?}\"",
+ get_host_os(),
+ game_install.install_type
+ ));
+ }
+
+ let bypass_checks = bypass_checks.unwrap_or(false);
+
+ // Only check guards if bypassing checks is not enabled
+ if !bypass_checks {
+ // Some safety checks before, should have more in the future
+ if get_northstar_version_number(&game_install.game_path).is_err() {
+ return Err(anyhow!("Not all checks were met").to_string());
+ }
+
+ // Require Origin to be running to launch Northstar
+ let origin_is_running = check_origin_running();
+ if !origin_is_running {
+ return Err(
+ anyhow!("Origin not running, start Origin before launching Northstar").to_string(),
+ );
+ }
+ }
+
+ // Switch to Titanfall2 directory for launching
+ // NorthstarLauncher.exe expects to be run from that folder
+ if std::env::set_current_dir(game_install.game_path.clone()).is_err() {
+ // We failed to get to Titanfall2 directory
+ return Err(anyhow!("Couldn't access Titanfall2 directory").to_string());
+ }
+
+ // Only Windows with Steam or Origin are supported at the moment
+ if host_os == "windows"
+ && (matches!(game_install.install_type, InstallType::STEAM)
+ || matches!(game_install.install_type, InstallType::ORIGIN)
+ || matches!(game_install.install_type, InstallType::UNKNOWN))
+ {
+ let ns_exe_path = format!("{}/NorthstarLauncher.exe", game_install.game_path);
+ let _output = std::process::Command::new("C:\\Windows\\System32\\cmd.exe")
+ .args(["/C", "start", "", &ns_exe_path])
+ .spawn()
+ .expect("failed to execute process");
+ return Ok("Launched game".to_string());
+ }
+
+ Err(format!(
+ "Not yet implemented for {:?} on {}",
+ game_install.install_type,
+ get_host_os()
+ ))
+}