From 0155ff60fd0d3590b4729befec914a1e886b211d Mon Sep 17 00:00:00 2001 From: Bogdan Date: Thu, 15 Jun 2023 05:09:27 +0300 Subject: [PATCH] Map Cardigann capabilities from meta definition --- .../Definitions/Cardigann/Cardigann.cs | 52 ++++++++++++++++++- .../Definitions/Cardigann/CardigannMetaDef.cs | 3 +- 2 files changed, 53 insertions(+), 2 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/Cardigann.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/Cardigann.cs index 9254f9775..e4504dc91 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/Cardigann.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/Cardigann.cs @@ -166,7 +166,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann SupportsSearch = SupportsSearch, SupportsRedirect = SupportsRedirect, SupportsPagination = SupportsPagination, - Capabilities = new IndexerCapabilities(), + Capabilities = ParseCardigannCapabilities(definition), ExtraFields = settings }; } @@ -238,5 +238,55 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann return null; } + + private IndexerCapabilities ParseCardigannCapabilities(CardigannMetaDefinition definition) + { + var capabilities = new IndexerCapabilities(); + + if (definition.Caps == null) + { + return capabilities; + } + + capabilities.ParseCardigannSearchModes(definition.Caps.Modes); + capabilities.SupportsRawSearch = definition.Caps.Allowrawsearch; + + if (definition.Caps.Categories != null && definition.Caps.Categories.Any()) + { + foreach (var category in definition.Caps.Categories) + { + var cat = NewznabStandardCategory.GetCatByName(category.Value); + + if (cat == null) + { + continue; + } + + capabilities.Categories.AddCategoryMapping(category.Key, cat); + } + } + + if (definition.Caps.Categorymappings != null && definition.Caps.Categorymappings.Any()) + { + foreach (var categoryMapping in definition.Caps.Categorymappings) + { + IndexerCategory torznabCat = null; + + if (categoryMapping.cat != null) + { + torznabCat = NewznabStandardCategory.GetCatByName(categoryMapping.cat); + + if (torznabCat == null) + { + continue; + } + } + + capabilities.Categories.AddCategoryMapping(categoryMapping.id, torznabCat, categoryMapping.desc); + } + } + + return capabilities; + } } } diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannMetaDef.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannMetaDef.cs index b252d2674..62286591c 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannMetaDef.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannMetaDef.cs @@ -19,7 +19,8 @@ namespace NzbDrone.Core.Indexers.Definitions.Cardigann public List Links { get; set; } public List Legacylinks { get; set; } public List Settings { get; set; } - public string Sha { get; set; } public LoginBlock Login { get; set; } + public CapabilitiesBlock Caps { get; set; } + public string Sha { get; set; } } }