From 2d00742212cb585cf7aff124ece04d8154bd7aee Mon Sep 17 00:00:00 2001 From: Pat Hartl Date: Fri, 20 Sep 2024 00:27:20 -0500 Subject: [PATCH] Allow scripts to return data --- .../PowerShell/PowerShellScript.cs | 14 +++++- LANCommander.SDK/SaveService.cs | 4 +- LANCommander.SDK/ScriptService.cs | 46 ++++++++++++++----- 3 files changed, 48 insertions(+), 16 deletions(-) diff --git a/LANCommander.SDK/PowerShell/PowerShellScript.cs b/LANCommander.SDK/PowerShell/PowerShellScript.cs index af0d731a..2c5b942a 100644 --- a/LANCommander.SDK/PowerShell/PowerShellScript.cs +++ b/LANCommander.SDK/PowerShell/PowerShellScript.cs @@ -151,8 +151,9 @@ namespace LANCommander.SDK.PowerShell return this; } - public async Task ExecuteAsync() + public async Task ExecuteAsync() { + T result = default; var wow64Value = IntPtr.Zero; if (IgnoreWow64) @@ -213,13 +214,22 @@ namespace LANCommander.SDK.PowerShell if (Debug) await OnDebugBreak?.Invoke(ps); + + try + { + result = (T)ps.Runspace.SessionStateProxy.PSVariable.GetValue("Return"); + } + catch + { + // Couldn't case properly, fallback to default + } } } if (IgnoreWow64) Wow64RevertWow64FsRedirection(ref wow64Value); - return 0; + return result; } private void Error_DataAdded(object sender, DataAddedEventArgs e) diff --git a/LANCommander.SDK/SaveService.cs b/LANCommander.SDK/SaveService.cs index a6b1c739..9bf155d4 100644 --- a/LANCommander.SDK/SaveService.cs +++ b/LANCommander.SDK/SaveService.cs @@ -205,7 +205,7 @@ namespace LANCommander.SDK if (Client.Scripts.Debug) script.EnableDebug(); - await script.ExecuteAsync(); + await script.ExecuteAsync(); } #endregion @@ -279,7 +279,7 @@ namespace LANCommander.SDK if (Client.Scripts.Debug) script.EnableDebug(); - await script.ExecuteAsync(); + await script.ExecuteAsync(); var exportFile = new StringBuilder(); diff --git a/LANCommander.SDK/ScriptService.cs b/LANCommander.SDK/ScriptService.cs index 751816c0..dec04d18 100644 --- a/LANCommander.SDK/ScriptService.cs +++ b/LANCommander.SDK/ScriptService.cs @@ -43,6 +43,8 @@ namespace LANCommander.SDK public async Task RunInstallScriptAsync(string installDirectory, Guid gameId) { + int result = default; + try { var manifest = ManifestHelper.Read(installDirectory, gameId); @@ -82,7 +84,7 @@ namespace LANCommander.SDK handled = await ExternalScriptRunner.Invoke(script); if (!handled) - await script.ExecuteAsync(); + result = await script.ExecuteAsync(); } else { @@ -97,11 +99,13 @@ namespace LANCommander.SDK Logger?.LogError(ex, "Ran into an unexpected error when attempting to run an Install script"); } - return 0; + return result; } - public async Task RunUninstallScriptAsync(string installDirectory, Guid gameId) + public async Task RunUninstallScriptAsync(string installDirectory, Guid gameId) { + int result = default; + try { var manifest = ManifestHelper.Read(installDirectory, gameId); @@ -141,7 +145,7 @@ namespace LANCommander.SDK handled = await ExternalScriptRunner.Invoke(script); if (!handled) - await script.ExecuteAsync(); + result = await script.ExecuteAsync(); } else { @@ -155,10 +159,14 @@ namespace LANCommander.SDK { Logger?.LogError(ex, "Ran into an unexpected error when attempting to get an Uninstall script"); } + + return result; } - public async Task RunBeforeStartScriptAsync(string installDirectory, Guid gameId) + public async Task RunBeforeStartScriptAsync(string installDirectory, Guid gameId) { + int result = default; + try { var manifest = ManifestHelper.Read(installDirectory, gameId); @@ -201,7 +209,7 @@ namespace LANCommander.SDK handled = await ExternalScriptRunner.Invoke(script); if (!handled) - await script.ExecuteAsync(); + result = await script.ExecuteAsync(); } else { @@ -215,10 +223,14 @@ namespace LANCommander.SDK { Logger?.LogError(ex, "Ran into an unexpected error when attempting to run a Before Start script"); } + + return result; } - public async Task RunAfterStopScriptAsync(string installDirectory, Guid gameId) + public async Task RunAfterStopScriptAsync(string installDirectory, Guid gameId) { + int result = default; + try { var manifest = ManifestHelper.Read(installDirectory, gameId); @@ -259,7 +271,7 @@ namespace LANCommander.SDK handled = await ExternalScriptRunner.Invoke(script); if (!handled) - await script.ExecuteAsync(); + result = await script.ExecuteAsync(); } else { @@ -272,10 +284,14 @@ namespace LANCommander.SDK { Logger?.LogError(ex, "Ran into an unexpected error when attempting to run an After Stop script"); } + + return result; } - public async Task RunNameChangeScriptAsync(string installDirectory, Guid gameId, string newName) + public async Task RunNameChangeScriptAsync(string installDirectory, Guid gameId, string newName) { + int result = default; + try { var path = ScriptHelper.GetScriptFilePath(installDirectory, gameId, Enums.ScriptType.NameChange); @@ -332,7 +348,7 @@ namespace LANCommander.SDK handled = await ExternalScriptRunner.Invoke(script); if (!handled) - await script.ExecuteAsync(); + result = await script.ExecuteAsync(); } else { @@ -346,10 +362,14 @@ namespace LANCommander.SDK { Logger?.LogError(ex, "Ran into an unexpected error when attempting to run a Name Change script"); } + + return result; } - public async Task RunKeyChangeScriptAsync(string installDirectory, Guid gameId, string key) + public async Task RunKeyChangeScriptAsync(string installDirectory, Guid gameId, string key) { + int result = default; + try { var path = ScriptHelper.GetScriptFilePath(installDirectory, gameId, SDK.Enums.ScriptType.KeyChange); @@ -395,7 +415,7 @@ namespace LANCommander.SDK handled = await ExternalScriptRunner.Invoke(script); if (!handled) - await script.ExecuteAsync(); + result = await script.ExecuteAsync(); } else { @@ -407,6 +427,8 @@ namespace LANCommander.SDK { Logger?.LogError(ex, "Ran into an unexpected error when attempting to run a Key Change script"); } + + return result; } } }