From 4e8bb37a5c984b074e7a0103ad3fd403f5410038 Mon Sep 17 00:00:00 2001 From: Bogdan Date: Tue, 28 Feb 2023 21:43:56 +0200 Subject: [PATCH] New: (Cardigann) Add MissingAttributeEqualsNoResults support --- .../Definitions/Cardigann/CardigannBase.cs | 16 +++++++++++++--- .../Definitions/Cardigann/CardigannDefinition.cs | 1 + .../Definitions/Cardigann/CardigannParser.cs | 6 ++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs index dcfeb4024..afee4d523 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannBase.cs @@ -825,9 +825,19 @@ protected string ResolveSiteLink() protected JArray JsonParseRowsSelector(JToken parsedJson, string rowSelector) { var selector = rowSelector.Split(':')[0]; - var rowsObj = parsedJson.SelectToken(selector).Value(); - return new JArray(rowsObj.Where(t => - JsonParseFieldSelector(t.Value(), rowSelector.Remove(0, selector.Length)) != null)); + + try + { + var rowsObj = parsedJson.SelectToken(selector).Value(); + + return new JArray(rowsObj.Where(t => JsonParseFieldSelector(t.Value(), rowSelector.Remove(0, selector.Length)) != null)); + } + catch (Exception ex) + { + _logger.Trace(ex, "Failed to parse JSON rows for selector \"{0}\"", rowSelector); + + return null; + } } private string JsonParseFieldSelector(JToken parsedJson, string rowSelector) diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannDefinition.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannDefinition.cs index d3f6019da..bfd455f38 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannDefinition.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannDefinition.cs @@ -159,6 +159,7 @@ public class RowsBlock : SelectorBlock public SelectorBlock Dateheaders { get; set; } public SelectorBlock Count { get; set; } public bool Multiple { get; set; } + public bool MissingAttributeEqualsNoResults { get; set; } } public class SearchPathBlock : RequestBlock diff --git a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs index de392978e..379959a76 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Cardigann/CardigannParser.cs @@ -90,8 +90,14 @@ public IList ParseResponse(IndexerResponse indexerResponse) } var rowsArray = JsonParseRowsSelector(parsedJson, search.Rows.Selector); + if (rowsArray == null) { + if (search.Rows.MissingAttributeEqualsNoResults) + { + return releases; + } + throw new IndexerException(indexerResponse, "Error Parsing Rows Selector"); }