63 lines
1.6 KiB
C#
63 lines
1.6 KiB
C#
|
using SharpCompress;
|
|||
|
using SPTInstaller.Interfaces;
|
|||
|
using SPTInstaller.Models;
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Threading.Tasks;
|
|||
|
|
|||
|
namespace SPTInstaller.Controllers
|
|||
|
{
|
|||
|
public class InstallController
|
|||
|
{
|
|||
|
public event EventHandler<IProgressableTask> TaskChanged = delegate { };
|
|||
|
|
|||
|
private IPreCheck[] _preChecks { get; set; }
|
|||
|
private IProgressableTask[] _tasks { get; set; }
|
|||
|
|
|||
|
public InstallController(IProgressableTask[] tasks, IPreCheck[] preChecks = null)
|
|||
|
{
|
|||
|
_tasks = tasks;
|
|||
|
_preChecks = preChecks;
|
|||
|
}
|
|||
|
|
|||
|
public async Task<IResult> RunPreChecks()
|
|||
|
{
|
|||
|
var requiredResults = new List<IResult>();
|
|||
|
|
|||
|
_preChecks.ForEach(x => x.IsPending = true);
|
|||
|
|
|||
|
foreach (var check in _preChecks)
|
|||
|
{
|
|||
|
var result = await check.RunCheck();
|
|||
|
|
|||
|
if (check.IsRequired)
|
|||
|
{
|
|||
|
requiredResults.Add(result);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
foreach(var result in requiredResults)
|
|||
|
{
|
|||
|
if (!result.Succeeded)
|
|||
|
return Result.FromError("Some required checks have failed");
|
|||
|
}
|
|||
|
|
|||
|
return Result.FromSuccess();
|
|||
|
}
|
|||
|
|
|||
|
public async Task<IResult> RunTasks()
|
|||
|
{
|
|||
|
foreach (var task in _tasks)
|
|||
|
{
|
|||
|
TaskChanged?.Invoke(null, task);
|
|||
|
|
|||
|
var result = await task.RunAsync();
|
|||
|
|
|||
|
if (!result.Succeeded) return result;
|
|||
|
}
|
|||
|
|
|||
|
return Result.FromSuccess("Install Complete. Happy Playing!");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|