SPT-AKI-Installer/SPTInstaller/ViewModels/PreChecksViewModel.cs

107 lines
3.2 KiB
C#
Raw Normal View History

using System.Collections.ObjectModel;
2023-08-03 18:02:38 -04:00
using System.Diagnostics.Metrics;
using System.Reflection;
using System.Threading.Tasks;
using System.Windows.Input;
using ReactiveUI;
2023-07-29 14:26:45 -04:00
using Serilog;
2023-05-11 23:11:39 -04:00
using SPTInstaller.Controllers;
using SPTInstaller.Helpers;
using SPTInstaller.Models;
namespace SPTInstaller.ViewModels;
public class PreChecksViewModel : ViewModelBase
2023-05-11 23:11:39 -04:00
{
public ObservableCollection<PreCheckBase> PreChecks { get; set; } = new(ServiceHelper.GetAll<PreCheckBase>());
public ICommand StartInstallCommand { get; set; }
public ICommand ShowDetailedViewCommand { get; set; }
2023-08-03 18:02:38 -04:00
public ICommand UpdateInstallerCommand { get; set; }
public ICommand DismissUpdateCommand { get; set; }
public InstallerUpdateInfo UpdateInfo { get; set; } = new InstallerUpdateInfo();
private string _installPath;
public string InstallPath
{
get => _installPath;
set => this.RaiseAndSetIfChanged(ref _installPath, value);
}
2023-07-12 09:00:00 +02:00
2023-08-03 18:02:38 -04:00
private bool _allowInstall;
2023-07-30 16:15:52 -04:00
public bool AllowInstall
2023-07-12 09:00:00 +02:00
{
2023-07-12 16:39:37 +02:00
get => _allowInstall;
set => this.RaiseAndSetIfChanged(ref _allowInstall, value);
2023-07-12 09:00:00 +02:00
}
2023-05-11 23:11:39 -04:00
2023-08-03 18:02:38 -04:00
private bool _allowDetailsButton = false;
public bool AllowDetailsButton
{
get => _allowDetailsButton;
set => this.RaiseAndSetIfChanged(ref _allowDetailsButton, value);
}
public PreChecksViewModel(IScreen host) : base(host)
{
var data = ServiceHelper.Get<InternalData?>();
var installer = ServiceHelper.Get<InstallController?>();
2023-05-11 23:11:39 -04:00
if (data == null || installer == null)
2023-05-11 23:11:39 -04:00
{
NavigateTo(new MessageViewModel(HostScreen, Result.FromError("Failed to get required service for prechecks")));
return;
}
2023-05-11 23:11:39 -04:00
data.OriginalGamePath = PreCheckHelper.DetectOriginalGamePath();
if (data.OriginalGamePath == null)
{
NavigateTo(new MessageViewModel(HostScreen, Result.FromError("Could not find EFT install.\n\nDo you own and have the game installed?")));
}
data.TargetInstallPath = Environment.CurrentDirectory;
InstallPath = data.TargetInstallPath;
2023-05-11 23:11:39 -04:00
Log.Information($"Install Path: {FileHelper.GetRedactedPath(InstallPath)}");
2023-07-30 16:15:52 -04:00
StartInstallCommand = ReactiveCommand.Create(() =>
{
2023-08-03 18:02:38 -04:00
UpdateInfo.ShowCard = false;
2023-07-30 16:15:52 -04:00
NavigateTo(new InstallViewModel(HostScreen));
});
2023-07-29 14:26:45 -04:00
ShowDetailedViewCommand = ReactiveCommand.Create(() =>
{
2023-08-03 18:02:38 -04:00
UpdateInfo.ShowCard = false;
2023-07-29 14:26:45 -04:00
Log.Logger.Information("Opening Detailed PreCheck View");
NavigateTo(new DetailedPreChecksViewModel(HostScreen));
});
2023-05-14 22:35:06 -04:00
2023-08-03 18:02:38 -04:00
UpdateInstallerCommand = ReactiveCommand.Create(async () =>
{
AllowDetailsButton = false;
AllowInstall = false;
await UpdateInfo.UpdateInstaller();
});
DismissUpdateCommand = ReactiveCommand.Create(() =>
{
UpdateInfo.ShowCard = false;
});
Task.Run(async () =>
{
var result = await installer.RunPreChecks();
2023-08-03 18:02:38 -04:00
await UpdateInfo.CheckForUpdates(Assembly.GetExecutingAssembly().GetName()?.Version);
AllowDetailsButton = true;
2023-07-12 16:39:37 +02:00
AllowInstall = result.Succeeded;
});
2023-05-11 23:11:39 -04:00
}
}