aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan <sentrycraft123@gmail.com>2023-07-17 21:59:38 +0200
committerGitHub <noreply@github.com>2023-07-17 21:59:38 +0200
commitb41967f90db7e6643b3b215dbae95070c60026d6 (patch)
tree8332d2161d97184b0559e6fa380412bc34773690
parentcad001298b35a6479e48a39a94d29438a117bd18 (diff)
downloadFlightCore-b41967f90db7e6643b3b215dbae95070c60026d6.tar.gz
FlightCore-b41967f90db7e6643b3b215dbae95070c60026d6.zip
feat: Launch via Steam on non-Windows systems if possible (#422)
-rw-r--r--src-tauri/src/main.rs57
-rw-r--r--src-tauri/src/northstar/mod.rs78
2 files changed, 68 insertions, 67 deletions
diff --git a/src-tauri/src/main.rs b/src-tauri/src/main.rs
index 5d71713a..a584eea9 100644
--- a/src-tauri/src/main.rs
+++ b/src-tauri/src/main.rs
@@ -128,7 +128,7 @@ fn main() {
install_northstar_caller,
update_northstar,
northstar::launch_northstar,
- launch_northstar_steam,
+ northstar::launch_northstar_steam,
github::release_notes::check_is_flightcore_outdated,
repair_and_verify::get_log_list,
repair_and_verify::verify_game_files,
@@ -461,8 +461,6 @@ mod platform_specific;
#[cfg(target_os = "linux")]
use platform_specific::linux;
-use crate::constants::TITANFALL2_STEAM_ID;
-
#[derive(Serialize, Deserialize, Debug, Clone)]
pub enum InstallType {
STEAM,
@@ -527,56 +525,3 @@ pub fn check_is_valid_game_path(game_install_path: &str) -> Result<(), String> {
fn get_host_os() -> String {
env::consts::OS.to_string()
}
-
-/// Prepare Northstar and Launch through Steam using the Browser Protocol
-#[tauri::command]
-fn launch_northstar_steam(
- game_install: GameInstall,
- _bypass_checks: Option<bool>,
-) -> Result<String, String> {
- if !matches!(game_install.install_type, InstallType::STEAM) {
- return Err("Titanfall2 was not installed via Steam".to_string());
- }
-
- match steamlocate::SteamDir::locate() {
- Some(mut steamdir) => {
- if get_host_os() != "windows" {
- let titanfall2_steamid: u32 = TITANFALL2_STEAM_ID.parse().unwrap();
- match steamdir.compat_tool(&titanfall2_steamid) {
- Some(compat) => {
- if !compat
- .name
- .clone()
- .unwrap()
- .to_ascii_lowercase()
- .contains("northstarproton")
- {
- return Err(
- "Titanfall2 was not configured to use NorthstarProton".to_string()
- );
- }
- }
- None => {
- return Err(
- "Titanfall2 was not configured to use a compatibility tool".to_string()
- );
- }
- }
- }
- }
- None => {
- return Err("Couldn't access Titanfall2 directory".to_string());
- }
- }
-
- // Switch to Titanfall2 directory to set everything up
- if std::env::set_current_dir(game_install.game_path).is_err() {
- // We failed to get to Titanfall2 directory
- return Err("Couldn't access Titanfall2 directory".to_string());
- }
-
- match open::that(format!("steam://run/{}//--northstar/", TITANFALL2_STEAM_ID)) {
- Ok(()) => Ok("Started game".to_string()),
- Err(_err) => Err("Failed to launch Titanfall 2 via Steam".to_string()),
- }
-}
diff --git a/src-tauri/src/northstar/mod.rs b/src-tauri/src/northstar/mod.rs
index 47510dbd..bf55603b 100644
--- a/src-tauri/src/northstar/mod.rs
+++ b/src-tauri/src/northstar/mod.rs
@@ -3,7 +3,10 @@
pub mod install;
use crate::util::check_ea_app_or_origin_running;
-use crate::{constants::CORE_MODS, get_host_os, GameInstall, InstallType};
+use crate::{
+ constants::{CORE_MODS, TITANFALL2_STEAM_ID},
+ get_host_os, GameInstall, InstallType,
+};
use anyhow::anyhow;
/// Check version number of a mod
@@ -65,16 +68,16 @@ pub fn launch_northstar(
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
- ));
+ if host_os != "windows" {
+ if !matches!(game_install.install_type, InstallType::STEAM) {
+ return Err(format!(
+ "Not yet implemented for \"{}\" with Titanfall2 installed via \"{:?}\"",
+ get_host_os(),
+ game_install.install_type
+ ));
+ }
+
+ return launch_northstar_steam(game_install, bypass_checks);
}
let bypass_checks = bypass_checks.unwrap_or(false);
@@ -122,3 +125,56 @@ pub fn launch_northstar(
get_host_os()
))
}
+
+/// Prepare Northstar and Launch through Steam using the Browser Protocol
+#[tauri::command]
+pub fn launch_northstar_steam(
+ game_install: GameInstall,
+ _bypass_checks: Option<bool>,
+) -> Result<String, String> {
+ if !matches!(game_install.install_type, InstallType::STEAM) {
+ return Err("Titanfall2 was not installed via Steam".to_string());
+ }
+
+ match steamlocate::SteamDir::locate() {
+ Some(mut steamdir) => {
+ if get_host_os() != "windows" {
+ let titanfall2_steamid: u32 = TITANFALL2_STEAM_ID.parse().unwrap();
+ match steamdir.compat_tool(&titanfall2_steamid) {
+ Some(compat) => {
+ if !compat
+ .name
+ .clone()
+ .unwrap()
+ .to_ascii_lowercase()
+ .contains("northstarproton")
+ {
+ return Err(
+ "Titanfall2 was not configured to use NorthstarProton".to_string()
+ );
+ }
+ }
+ None => {
+ return Err(
+ "Titanfall2 was not configured to use a compatibility tool".to_string()
+ );
+ }
+ }
+ }
+ }
+ None => {
+ return Err("Couldn't access Titanfall2 directory".to_string());
+ }
+ }
+
+ // Switch to Titanfall2 directory to set everything up
+ if std::env::set_current_dir(game_install.game_path).is_err() {
+ // We failed to get to Titanfall2 directory
+ return Err("Couldn't access Titanfall2 directory".to_string());
+ }
+
+ match open::that(format!("steam://run/{}//--northstar/", TITANFALL2_STEAM_ID)) {
+ Ok(()) => Ok("Started game".to_string()),
+ Err(_err) => Err("Failed to launch Titanfall 2 via Steam".to_string()),
+ }
+}