LenovoLegionToolkit
27 строк · 914.0 Байт
1using System.Threading.Tasks;
2using LenovoLegionToolkit.Lib.Features;
3
4namespace LenovoLegionToolkit.Lib.Automation.Steps;
5
6public abstract class AbstractFeatureAutomationStep<T> : IAutomationStep<T> where T : struct
7{
8private readonly IFeature<T> _feature = IoCContainer.Resolve<IFeature<T>>();
9
10public T State { get; }
11
12protected AbstractFeatureAutomationStep(T state) => State = state;
13
14public Task<bool> IsSupportedAsync() => _feature.IsSupportedAsync();
15
16public virtual async Task RunAsync(AutomationEnvironment _)
17{
18var currentState = await _feature.GetStateAsync().ConfigureAwait(false);
19if (!State.Equals(currentState))
20await _feature.SetStateAsync(State).ConfigureAwait(false);
21MessagingCenter.Publish(State);
22}
23
24public Task<T[]> GetAllStatesAsync() => _feature.GetAllStatesAsync();
25
26public abstract IAutomationStep DeepCopy();
27}
28