From 5b20906365fef6d59616534353ddd3d2196c8fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lower?= Date: Mon, 15 Jan 2024 16:53:48 +0100 Subject: [PATCH] Support passing launcher information to mods This change together with https://github.com/praydog/uevr-frontend/pull/9 will allow one click 'launch to VR' from within Rai Pal. This also introduces proper division of responsibility where Rai Pal knows what to launch and UEVRInjector knows how to launch it. On top of the code change UEVR `rai-pal-manifest.json` needs to look like this: ```json { "version": "1.03", "runnable": { "path": "UEVRInjector.exe", "args": [ "--attach={{ExecutableName}}", "--delay=30", "--launch={{StartCommand}}", "--launch_args={{StartCommandArgs}}" ] }, "engine": "Unreal", "unityBackend": null } ``` --- backend/src/mod_loaders/runnable_loader.rs | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/backend/src/mod_loaders/runnable_loader.rs b/backend/src/mod_loaders/runnable_loader.rs index 65e98d63..079080b5 100644 --- a/backend/src/mod_loaders/runnable_loader.rs +++ b/backend/src/mod_loaders/runnable_loader.rs @@ -27,7 +27,7 @@ use crate::{ result::Error, serializable_enum, serializable_struct, - Result, + Result, providers::provider_command::ProviderCommand, }; serializable_struct!(RunnableLoader { @@ -38,6 +38,8 @@ serializable_enum!(RunnableParameter { ExecutableName, ExecutablePath, GameJson, + StartCommand, + StartCommandArgs, }); #[async_trait] @@ -92,6 +94,24 @@ fn replace_parameters(argument: &str, game: &InstalledGame) -> String { result = replace_parameter_value(&result, RunnableParameter::GameJson, || { Ok(serde_json::to_string(&game)?) }); + result = replace_parameter_value(&result, RunnableParameter::StartCommand, || { + match &game.start_command { + Some(provider_command) => match provider_command { + ProviderCommand::String(s) => Ok(s.to_string()), + ProviderCommand::Path(exe_path, _) => Ok(exe_path.to_string_lossy().to_string()) + } + None => Ok(game.executable.path.to_string_lossy().to_string()) // fallback to path + } + }); + result = replace_parameter_value(&result, RunnableParameter::StartCommandArgs, || { + match &game.start_command { + Some(provider_command) => match provider_command { + ProviderCommand::Path(_, args) => Ok(args.join(" ")), + _ => Ok(String::from("")), + } + _ => Ok(String::from("")), + } + }); result }