using System.Collections.Generic; using System.Linq; using FluentValidation; using FluentValidation.Validators; namespace Lidarr.Api.V1.Profiles.Quality { public static class QualityCutoffValidator { public static IRuleBuilderOptions ValidCutoff(this IRuleBuilder ruleBuilder) { return ruleBuilder.SetValidator(new ValidCutoffValidator()); } } public class ValidCutoffValidator : PropertyValidator { public ValidCutoffValidator() : base("Cutoff must be an allowed quality or group") { } protected override bool IsValid(PropertyValidatorContext context) { var cutoff = (int)context.PropertyValue; dynamic instance = context.ParentContext.InstanceToValidate; var items = instance.Items as IList; var cutoffItem = items.SingleOrDefault(i => i.Id == cutoff || (i.Quality != null && i.Quality.Id == cutoff)); if (cutoffItem == null) { return false; } if (!cutoffItem.Allowed) { return false; } return true; } } }