From 4095bd030d750e46cec31fcb02d8e8d99a922fa0 Mon Sep 17 00:00:00 2001 From: Garfield69 Date: Sun, 27 Feb 2022 08:23:37 +1300 Subject: [PATCH] YTS: handle YTS bug where count>0 but no movies. Resolves #12598 --- src/Jackett.Common/Definitions/yts.yml | 2 ++ src/Jackett.Common/Indexers/CardigannIndexer.cs | 17 +++++++++++++---- src/Jackett.Common/Models/IndexerDefinition.cs | 1 + 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/Jackett.Common/Definitions/yts.yml b/src/Jackett.Common/Definitions/yts.yml index 304bfc6fb..c74429453 100644 --- a/src/Jackett.Common/Definitions/yts.yml +++ b/src/Jackett.Common/Definitions/yts.yml @@ -66,6 +66,8 @@ search: selector: data.movies attribute: torrents multiple: true + # bug at YTS can return movie_count > 0 and no movie torrents #12598 + missingAttributeEquals0Results: true count: selector: data.movie_count diff --git a/src/Jackett.Common/Indexers/CardigannIndexer.cs b/src/Jackett.Common/Indexers/CardigannIndexer.cs index 42713e7e0..598c3be4b 100644 --- a/src/Jackett.Common/Indexers/CardigannIndexer.cs +++ b/src/Jackett.Common/Indexers/CardigannIndexer.cs @@ -1407,6 +1407,8 @@ namespace Jackett.Common.Indexers } var rowsArray = JsonParseRowsSelector(parsedJson, Search.Rows.Selector); + if (rowsArray == null && Search.Rows.MissingAttributeEquals0Results) + continue; if (rowsArray == null) throw new Exception("Error Parsing Rows Selector. There are 0 rows."); @@ -2100,10 +2102,17 @@ namespace Jackett.Common.Indexers private 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 + { + return null; + } } private string JsonParseFieldSelector(JToken parsedJson, string rowSelector) diff --git a/src/Jackett.Common/Models/IndexerDefinition.cs b/src/Jackett.Common/Models/IndexerDefinition.cs index bb053321a..19f47e3b8 100644 --- a/src/Jackett.Common/Models/IndexerDefinition.cs +++ b/src/Jackett.Common/Models/IndexerDefinition.cs @@ -152,6 +152,7 @@ namespace Jackett.Common.Models public selectorBlock Dateheaders { get; set; } public selectorBlock Count { get; set; } public bool Multiple { get; set; } = false; + public bool MissingAttributeEquals0Results { get; set; } = false; } public class searchPathBlock : requestBlock