diff --git a/src/NzbDrone.Core.Test/Files/Indexers/Torznab/torznab_animetosho_caps.xml b/src/NzbDrone.Core.Test/Files/Indexers/Torznab/torznab_animetosho_caps.xml new file mode 100644 index 000000000..e8bbf2930 --- /dev/null +++ b/src/NzbDrone.Core.Test/Files/Indexers/Torznab/torznab_animetosho_caps.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabCapabilitiesProviderFixture.cs b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabCapabilitiesProviderFixture.cs index 085188d5a..e643263f7 100644 --- a/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabCapabilitiesProviderFixture.cs +++ b/src/NzbDrone.Core.Test/IndexerTests/NewznabTests/NewznabCapabilitiesProviderFixture.cs @@ -84,6 +84,19 @@ namespace NzbDrone.Core.Test.IndexerTests.NewznabTests bookCats.Should().Contain("8000"); } + [Test] + public void should_find_sub_categories_as_main_categories() + { + GivenCapsResponse(ReadAllText("Files/Indexers/Torznab/torznab_animetosho_caps.xml")); + + var caps = Subject.GetCapabilities(_settings, _definition); + + var bookCats = caps.Categories.MapTrackerCatToNewznab("5070"); + + bookCats.Count.Should().Be(2); + bookCats.First().Id.Should().Be(5070); + } + [Test] public void should_map_by_name_when_available() { diff --git a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabCapabilitiesProvider.cs b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabCapabilitiesProvider.cs index 1d3952bf2..acdecca56 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabCapabilitiesProvider.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabCapabilitiesProvider.cs @@ -223,9 +223,16 @@ namespace NzbDrone.Core.Indexers.Newznab foreach (var xmlCategory in xmlCategories.Elements("category")) { var parentName = xmlCategory.Attribute("name").Value; + var parentNameLower = parentName?.ToLowerInvariant(); var parentId = int.Parse(xmlCategory.Attribute("id").Value); - var mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentName.ToLower().Contains(x.Name.ToLower())); + var mappedCat = NewznabStandardCategory.ParentCats.FirstOrDefault(x => parentNameLower.Contains(x.Name.ToLower())); + + if (mappedCat == null) + { + // Try to find name and Id in AllCats for sub cats that are mapped as parents + mappedCat = NewznabStandardCategory.AllCats.FirstOrDefault(x => x.Id == parentId && x.Name.ToLower().Contains(parentNameLower)); + } if (mappedCat == null) {