using System.Collections.Generic; using System.Linq; using FluentValidation; using NzbDrone.Common.Extensions; using NzbDrone.Core.Annotations; using NzbDrone.Core.Music; using NzbDrone.Core.Validation; namespace NzbDrone.Core.AutoTagging.Specifications { public class GenreSpecificationValidator : AbstractValidator { public GenreSpecificationValidator() { RuleFor(c => c.Value).NotEmpty(); } } public class GenreSpecification : AutoTaggingSpecificationBase { private static readonly GenreSpecificationValidator Validator = new GenreSpecificationValidator(); public override int Order => 1; public override string ImplementationName => "Genre"; [FieldDefinition(1, Label = "Genre(s)", Type = FieldType.Tag)] public IEnumerable Value { get; set; } protected override bool IsSatisfiedByWithoutNegate(Artist artist) { return artist?.Metadata?.Value?.Genres.Any(genre => Value.ContainsIgnoreCase(genre)) ?? false; } public override NzbDroneValidationResult Validate() { return new NzbDroneValidationResult(Validator.Validate(this)); } } }