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) { int cutoff = (int)context.PropertyValue; dynamic instance = context.ParentContext.InstanceToValidate; var items = instance.Items as IList; QualityProfileQualityItemResource cutoffItem = items.SingleOrDefault(i => (i.Quality == null && i.Id == cutoff) || i.Quality?.Id == cutoff); if (cutoffItem == null) { return false; } if (!cutoffItem.Allowed) { return false; } return true; } } }