74 lines
2.4 KiB
C#
74 lines
2.4 KiB
C#
using Plugin.Cowain.Driver.Abstractions;
|
|
using Plugin.Cowain.Driver.Attributes;
|
|
using Plugin.Cowain.Driver.IServices;
|
|
using Plugin.Cowain.Driver.Models;
|
|
|
|
|
|
namespace Plugin.Cowain.Driver.Services;
|
|
|
|
public class ActionPluginService : IActionPluginService
|
|
{
|
|
private readonly IEnumerable<IActionCondition> _actionConditions;
|
|
private readonly IEnumerable<IVariableAction> _variableActions;
|
|
public ActionPluginService(IEnumerable<IActionCondition> actionConditions, IEnumerable<IVariableAction> variableActions)
|
|
{
|
|
_actionConditions = actionConditions;
|
|
_variableActions = variableActions;
|
|
}
|
|
|
|
public List<ActionInfo>? GetActions()
|
|
{
|
|
var infos = new List<ActionInfo>();
|
|
foreach (var item in _variableActions)
|
|
{
|
|
var action = item.GetType();
|
|
var attribute = action.GetCustomAttributes(typeof(ActionAttribute), false).FirstOrDefault() as ActionAttribute;
|
|
if (attribute != null)
|
|
{
|
|
var driverInfo = new ActionInfo
|
|
{
|
|
Name = attribute.Name,
|
|
Desc = attribute.Desc,
|
|
};
|
|
infos.Add(driverInfo);
|
|
}
|
|
}
|
|
return infos;
|
|
}
|
|
|
|
public List<ConditionInfo>? GetConditions()
|
|
{
|
|
var infos = new List<ConditionInfo>();
|
|
foreach (var item in _actionConditions)
|
|
{
|
|
var action = item.GetType();
|
|
var attribute = action.GetCustomAttributes(typeof(ConditionAttribute), false).FirstOrDefault() as ConditionAttribute;
|
|
if (attribute != null)
|
|
{
|
|
var driverInfo = new ConditionInfo
|
|
{
|
|
Name = attribute.Name,
|
|
Desc = attribute.Desc,
|
|
};
|
|
infos.Add(driverInfo);
|
|
}
|
|
}
|
|
return infos;
|
|
}
|
|
|
|
|
|
public IActionCondition? GetCondition(string name)
|
|
{
|
|
var condition = _actionConditions.FirstOrDefault(d => d.GetType().GetCustomAttributes(typeof(ConditionAttribute), false).FirstOrDefault() is ConditionAttribute attribute && attribute.Name == name);
|
|
return condition;
|
|
}
|
|
|
|
public IVariableAction? GetAction(string name)
|
|
{
|
|
var action = _variableActions.FirstOrDefault(d => d.GetType().GetCustomAttributes(typeof(ActionAttribute), false).FirstOrDefault() is ActionAttribute attribute && attribute.Name == name);
|
|
return action;
|
|
}
|
|
|
|
|
|
}
|