diff --git a/backend/src/mod_loaders/runnable_loader.rs b/backend/src/mod_loaders/runnable_loader.rs index 65e98d63..5618bcd8 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,7 @@ serializable_enum!(RunnableParameter { ExecutableName, ExecutablePath, GameJson, + StartCommand, }); #[async_trait] @@ -92,6 +93,15 @@ 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(_, _) => Ok(game.executable.path.to_string_lossy().replacen("\\\\\\\\?\\\\", "", 1)) // for GOG we can use .exe directly + } + None => Ok(game.executable.path.to_string_lossy().replacen("\\\\\\\\?\\\\", "", 1)) // fallback to path + } + }); result }