using System.Collections.ObjectModel; using System.Threading.Tasks; using System.Windows.Input; using ReactiveUI; using SPTInstaller.Controllers; using SPTInstaller.Helpers; using SPTInstaller.Models; namespace SPTInstaller.ViewModels; public class PreChecksViewModel : ViewModelBase { private string _installPath; private bool _preCheckSucceeded; public ObservableCollection PreChecks { get; set; } = new(ServiceHelper.GetAll()); public ICommand StartInstallCommand { get; set; } public string InstallPath { get => _installPath; set => this.RaiseAndSetIfChanged(ref _installPath, value); } public bool PreCheckSucceeded { get => _preCheckSucceeded; set => this.RaiseAndSetIfChanged(ref _preCheckSucceeded, value); } public PreChecksViewModel(IScreen host) : base(host) { var data = ServiceHelper.Get(); var installer = ServiceHelper.Get(); if (data == null || installer == null) { NavigateTo(new MessageViewModel(HostScreen, Result.FromError("Failed to get required service for prechecks"))); return; } data.OriginalGamePath = PreCheckHelper.DetectOriginalGamePath(); data.TargetInstallPath = Environment.CurrentDirectory; InstallPath = data.TargetInstallPath; StartInstallCommand = ReactiveCommand.Create(() => NavigateTo(new InstallViewModel(HostScreen))); Task.Run(async () => { var result = await installer.RunPreChecks(); PreCheckSucceeded = result.Succeeded; }); } }