Merge pull request 'add eft launcher closed pre-check' (#39) from waffle.lord/SPT-AKI-Installer:master into master
Reviewed-on: CWX/SPT-AKI-Installer#39
This commit is contained in:
commit
69b662917d
@ -11,8 +11,10 @@ namespace SPTInstaller.Controllers;
|
|||||||
|
|
||||||
public class InstallController
|
public class InstallController
|
||||||
{
|
{
|
||||||
|
public event EventHandler RecheckRequested = delegate { };
|
||||||
public event EventHandler<IProgressableTask> TaskChanged = delegate { };
|
public event EventHandler<IProgressableTask> TaskChanged = delegate { };
|
||||||
|
|
||||||
|
private bool _installRunning = false;
|
||||||
private IPreCheck[] _preChecks { get; set; }
|
private IPreCheck[] _preChecks { get; set; }
|
||||||
private IProgressableTask[] _tasks { get; set; }
|
private IProgressableTask[] _tasks { get; set; }
|
||||||
|
|
||||||
@ -20,6 +22,22 @@ public class InstallController
|
|||||||
{
|
{
|
||||||
_tasks = tasks;
|
_tasks = tasks;
|
||||||
_preChecks = preChecks;
|
_preChecks = preChecks;
|
||||||
|
|
||||||
|
_preChecks.ForEach(x => x.ReeevaluationRequested += (s, e) =>
|
||||||
|
{
|
||||||
|
if (s is IPreCheck preCheck)
|
||||||
|
{
|
||||||
|
Log.Information($"{preCheck.Name}: requested re-evaluation");
|
||||||
|
|
||||||
|
if (_installRunning)
|
||||||
|
{
|
||||||
|
Log.Warning("Install is running, re-evaluation denied (how did you do this?)");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
RecheckRequested?.Invoke(this, null);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<IResult> RunPreChecks()
|
public async Task<IResult> RunPreChecks()
|
||||||
@ -51,6 +69,8 @@ public class InstallController
|
|||||||
|
|
||||||
public async Task<IResult> RunTasks()
|
public async Task<IResult> RunTasks()
|
||||||
{
|
{
|
||||||
|
_installRunning = true;
|
||||||
|
|
||||||
Log.Information("-<>--<>- Running Installer Tasks -<>--<>-");
|
Log.Information("-<>--<>- Running Installer Tasks -<>--<>-");
|
||||||
|
|
||||||
foreach (var task in _tasks)
|
foreach (var task in _tasks)
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
using System.Diagnostics;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Serilog;
|
||||||
|
using SPTInstaller.Models;
|
||||||
|
|
||||||
|
namespace SPTInstaller.Installer_Tasks.PreChecks;
|
||||||
|
|
||||||
|
public class EftLauncherPreCheck : PreCheckBase
|
||||||
|
{
|
||||||
|
public EftLauncherPreCheck() : base("EFT Launcher Closed", true)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public async override Task<PreCheckResult> CheckOperation()
|
||||||
|
{
|
||||||
|
var eftLauncherProcs = Process.GetProcessesByName("BsgLauncher");
|
||||||
|
|
||||||
|
return eftLauncherProcs.Length == 0
|
||||||
|
? PreCheckResult.FromSuccess("Eft launcher is closed")
|
||||||
|
: PreCheckResult.FromError("Eft launcher is open. Please close it to install SPT",
|
||||||
|
"Kill EFT Launcher Processes",
|
||||||
|
() =>
|
||||||
|
{
|
||||||
|
var bsgLauncherProcs = Process.GetProcessesByName("BsgLauncher");
|
||||||
|
|
||||||
|
foreach (var proc in bsgLauncherProcs)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
proc.Kill();
|
||||||
|
proc.WaitForExit();
|
||||||
|
Log.Information($"Killed Proc: {proc.ProcessName}#{proc.Id}");
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.Error(ex, $"Failed to kill proc: {proc.ProcessName}#{proc.Id}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
RequestReevaluation();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
@ -10,6 +10,7 @@ public interface IPreCheck
|
|||||||
public bool IsRequired { get; }
|
public bool IsRequired { get; }
|
||||||
public string PreCheckDetails { get; }
|
public string PreCheckDetails { get; }
|
||||||
public StatusSpinner.SpinnerState State { get; set; }
|
public StatusSpinner.SpinnerState State { get; set; }
|
||||||
|
public event EventHandler ReeevaluationRequested;
|
||||||
|
|
||||||
public Task<IResult> RunCheck();
|
public Task<IResult> RunCheck();
|
||||||
}
|
}
|
@ -8,6 +8,7 @@ namespace SPTInstaller.Models;
|
|||||||
|
|
||||||
public abstract class PreCheckBase : ReactiveObject, IPreCheck
|
public abstract class PreCheckBase : ReactiveObject, IPreCheck
|
||||||
{
|
{
|
||||||
|
public event EventHandler ReeevaluationRequested = delegate { };
|
||||||
private string _id;
|
private string _id;
|
||||||
public string Id
|
public string Id
|
||||||
{
|
{
|
||||||
@ -84,6 +85,14 @@ public abstract class PreCheckBase : ReactiveObject, IPreCheck
|
|||||||
(_, _) => StatusSpinner.SpinnerState.Error
|
(_, _) => StatusSpinner.SpinnerState.Error
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Request pre-checks to be re-evaluated
|
||||||
|
/// </summary>
|
||||||
|
public void RequestReevaluation()
|
||||||
|
{
|
||||||
|
ReeevaluationRequested?.Invoke(this, null);
|
||||||
|
}
|
||||||
|
|
||||||
public async Task<IResult> RunCheck()
|
public async Task<IResult> RunCheck()
|
||||||
{
|
{
|
||||||
State = StatusSpinner.SpinnerState.Running;
|
State = StatusSpinner.SpinnerState.Running;
|
||||||
|
@ -34,8 +34,8 @@ internal class Program
|
|||||||
#if !TEST
|
#if !TEST
|
||||||
ServiceHelper.Register<PreCheckBase, NetFramework472PreCheck>();
|
ServiceHelper.Register<PreCheckBase, NetFramework472PreCheck>();
|
||||||
ServiceHelper.Register<PreCheckBase, NetCore6PreCheck>();
|
ServiceHelper.Register<PreCheckBase, NetCore6PreCheck>();
|
||||||
|
|
||||||
ServiceHelper.Register<PreCheckBase, FreeSpacePreCheck>();
|
ServiceHelper.Register<PreCheckBase, FreeSpacePreCheck>();
|
||||||
|
ServiceHelper.Register<PreCheckBase, EftLauncherPreCheck>();
|
||||||
|
|
||||||
ServiceHelper.Register<InstallerTaskBase, InitializationTask>();
|
ServiceHelper.Register<InstallerTaskBase, InitializationTask>();
|
||||||
ServiceHelper.Register<InstallerTaskBase, ReleaseCheckTask>();
|
ServiceHelper.Register<InstallerTaskBase, ReleaseCheckTask>();
|
||||||
|
@ -9,8 +9,8 @@
|
|||||||
<PackageIcon>icon.ico</PackageIcon>
|
<PackageIcon>icon.ico</PackageIcon>
|
||||||
<ApplicationIcon>Assets\icon.ico</ApplicationIcon>
|
<ApplicationIcon>Assets\icon.ico</ApplicationIcon>
|
||||||
<Configurations>Debug;Release;TEST</Configurations>
|
<Configurations>Debug;Release;TEST</Configurations>
|
||||||
<AssemblyVersion>2.18</AssemblyVersion>
|
<AssemblyVersion>2.19</AssemblyVersion>
|
||||||
<FileVersion>2.18</FileVersion>
|
<FileVersion>2.19</FileVersion>
|
||||||
<Company>SPT-AKI</Company>
|
<Company>SPT-AKI</Company>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
|
@ -79,11 +79,25 @@ public class PreChecksViewModel : ViewModelBase
|
|||||||
set => this.RaiseAndSetIfChanged(ref _installButtonCheckState, value);
|
set => this.RaiseAndSetIfChanged(ref _installButtonCheckState, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void ReCheckRequested(object? sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
if (sender is InstallController installer)
|
||||||
|
{
|
||||||
|
var result = await installer.RunPreChecks();
|
||||||
|
AllowInstall = result.Succeeded;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public PreChecksViewModel(IScreen host) : base(host)
|
public PreChecksViewModel(IScreen host) : base(host)
|
||||||
{
|
{
|
||||||
var data = ServiceHelper.Get<InternalData?>();
|
var data = ServiceHelper.Get<InternalData?>();
|
||||||
var installer = ServiceHelper.Get<InstallController?>();
|
var installer = ServiceHelper.Get<InstallController?>();
|
||||||
|
|
||||||
|
installer.RecheckRequested += ReCheckRequested;
|
||||||
|
|
||||||
InstallButtonText = "Please wait ...";
|
InstallButtonText = "Please wait ...";
|
||||||
InstallButtonCheckState = StatusSpinner.SpinnerState.Pending;
|
InstallButtonCheckState = StatusSpinner.SpinnerState.Pending;
|
||||||
|
|
||||||
@ -158,6 +172,7 @@ public class PreChecksViewModel : ViewModelBase
|
|||||||
{
|
{
|
||||||
UpdateInfo.ShowCard = false;
|
UpdateInfo.ShowCard = false;
|
||||||
Log.Logger.Information("Opening Detailed PreCheck View");
|
Log.Logger.Information("Opening Detailed PreCheck View");
|
||||||
|
installer.RecheckRequested -= ReCheckRequested;
|
||||||
NavigateTo(new DetailedPreChecksViewModel(HostScreen));
|
NavigateTo(new DetailedPreChecksViewModel(HostScreen));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
InfoText="{Binding CacheInfoText}" State="{Binding CacheCheckState}"
|
InfoText="{Binding CacheInfoText}" State="{Binding CacheCheckState}"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextBlock Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="3"
|
<TextBlock Grid.Row="2" Grid.Column="1" Grid.ColumnSpan="2"
|
||||||
Foreground="DodgerBlue" FontWeight="SemiBold" FontSize="16"
|
Foreground="DodgerBlue" FontWeight="SemiBold" FontSize="16"
|
||||||
Text="{Binding InstallPath}" TextWrapping="Wrap"
|
Text="{Binding InstallPath}" TextWrapping="Wrap"
|
||||||
Margin="5"
|
Margin="5"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user