public async Task <bool> MeetConditions(IEntity source, IEnumerable <Condition> conditions) { // if there are no conditions to match, conditions are "meet" if (conditions == null || conditions.Count() == 0) { return(true); } List <bool> results = new(conditions.Count()); foreach (var condition in conditions) { var arguments = new ConditionExecutionArguments(source, serviceProvider); bool result = await condition.Check(arguments); results.Add(result); } return(results.All(x => x)); }
public override Task <bool> Check(ConditionExecutionArguments arguments) { DateTime compareDateTime = DateTime.Today; if (Mode == ScheduleMode.Time) { compareDateTime = compareDateTime.Add(Time ?? new TimeSpan(0)); } else { var service = arguments.GetService <ISunDataService>(); var sunData = service.GetLatest(); if (Mode == ScheduleMode.Sunrise) { compareDateTime = compareDateTime.Add(sunData.Sunrise.TimeOfDay); } else { compareDateTime = compareDateTime.Add(sunData.Sunset.TimeOfDay); } if (Time.HasValue) { compareDateTime = compareDateTime.Add(Time.Value); } } bool result = false; if (Compare == CompareType.GreaterThan) { result = DateTime.Now > compareDateTime; } else if (Compare == CompareType.LesserThan) { result = compareDateTime > DateTime.Now; } return(Task.FromResult(result)); }
public abstract Task <bool> Check(ConditionExecutionArguments arguments);