You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
32 lines
960 B
32 lines
960 B
1 year ago
|
using StabilityMatrix.Core.Models.Progress;
|
||
|
|
||
|
namespace StabilityMatrix.Core.Models.PackageModification;
|
||
|
|
||
|
public class PackageModificationRunner : IPackageModificationRunner
|
||
|
{
|
||
|
public async Task ExecuteSteps(IReadOnlyList<IPackageStep> steps)
|
||
|
{
|
||
|
var progress = new Progress<ProgressReport>(report =>
|
||
|
{
|
||
|
CurrentProgress = report;
|
||
|
OnProgressChanged(report);
|
||
|
});
|
||
|
|
||
|
IsRunning = true;
|
||
|
foreach (var step in steps)
|
||
|
{
|
||
|
CurrentStep = step;
|
||
|
await step.ExecuteAsync(progress).ConfigureAwait(false);
|
||
|
}
|
||
|
|
||
|
IsRunning = false;
|
||
|
}
|
||
|
|
||
|
public bool IsRunning { get; set; }
|
||
|
public ProgressReport CurrentProgress { get; set; }
|
||
|
public IPackageStep? CurrentStep { get; set; }
|
||
|
|
||
|
public event EventHandler<ProgressReport>? ProgressChanged;
|
||
|
protected virtual void OnProgressChanged(ProgressReport e) => ProgressChanged?.Invoke(this, e);
|
||
|
}
|