diff --git a/src/NzbDrone.Core/Profiles/Metadata/MetadataProfileService.cs b/src/NzbDrone.Core/Profiles/Metadata/MetadataProfileService.cs index c121ae16e..840db3b67 100644 --- a/src/NzbDrone.Core/Profiles/Metadata/MetadataProfileService.cs +++ b/src/NzbDrone.Core/Profiles/Metadata/MetadataProfileService.cs @@ -29,7 +29,8 @@ namespace NzbDrone.Core.Profiles.Metadata { public const string NONE_PROFILE_NAME = "None"; - private static readonly Regex PartOrSetRegex = new Regex(@"(?:\d+ of \d+|\d+/\d+|(?\d+)-(?\d+))"); + private static readonly Regex PartOrSetRegex = new Regex(@"(?\d+) of (?\d+)|(?\d+)\s?/\s?(?\d+)|(?\d+)\s?-\s?(?\d+)", + RegexOptions.Compiled | RegexOptions.IgnoreCase); private readonly IMetadataProfileRepository _profileRepository; private readonly IAuthorService _authorService; @@ -185,10 +186,14 @@ namespace NzbDrone.Core.Profiles.Metadata } // Skip things of form Title1 / Title2 when Title1 and Title2 are already in the list - var split = book.Title.Split('/').Select(x => x.Trim()).ToList(); - if (split.Count > 1 && split.All(x => titles.Contains(x))) + var bookTitles = new[] { book.Title }.Concat(book.Editions.Value.Select(x => x.Title)).ToList(); + foreach (var title in bookTitles) { - return true; + var split = title.Split('/').Select(x => x.Trim()).ToList(); + if (split.Count > 1 && split.All(x => titles.Contains(x))) + { + return true; + } } var match = PartOrSetRegex.Match(book.Title); @@ -196,7 +201,7 @@ namespace NzbDrone.Core.Profiles.Metadata if (match.Groups["from"].Success) { var from = int.Parse(match.Groups["from"].Value); - return from >= 1800 && from <= DateTime.UtcNow.Year ? false : true; + return from <= 1800 || from > DateTime.UtcNow.Year; } return false;