V6 Cardigann Changes (#1045)

* V6 Cardigann Changes

* fixup!

* !fixup range

* !fixup more cardigann tests
This commit is contained in:
Qstick
2022-06-27 20:39:15 -05:00
committed by GitHub
parent 654d2dbad3
commit 5ee95e3cc2
13 changed files with 135 additions and 16 deletions
@@ -6,11 +6,9 @@ using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using AngleSharp.Html.Parser;
using FluentValidation;
using NLog;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http;
using NzbDrone.Core.Annotations;
using NzbDrone.Core.Configuration;
using NzbDrone.Core.Indexers.Exceptions;
using NzbDrone.Core.Indexers.Settings;
@@ -18,8 +16,6 @@ using NzbDrone.Core.IndexerSearch.Definitions;
using NzbDrone.Core.Messaging.Events;
using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model;
using NzbDrone.Core.ThingiProvider;
using NzbDrone.Core.Validation;
namespace NzbDrone.Core.Indexers.Definitions
{
@@ -28,7 +28,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
protected readonly IndexerCapabilitiesCategories _categories = new IndexerCapabilitiesCategories();
protected readonly List<string> _defaultCategories = new List<string>();
protected readonly string[] OptionalFields = new string[] { "imdb", "imdbid", "rageid", "tmdbid", "tvdbid", "poster", "banner", "description" };
protected readonly string[] OptionalFields = new string[] { "imdb", "imdbid", "rageid", "tmdbid", "tvdbid", "poster", "banner", "description", "doubanid" };
protected static readonly string[] _SupportedLogicFunctions =
{
@@ -338,9 +338,9 @@ namespace NzbDrone.Core.Indexers.Cardigann
return variables;
}
protected delegate string TemplateTextModifier(string str);
public delegate string TemplateTextModifier(string str);
protected string ApplyGoTemplateText(string template, Dictionary<string, object> variables = null, TemplateTextModifier modifier = null)
public string ApplyGoTemplateText(string template, Dictionary<string, object> variables = null, TemplateTextModifier modifier = null)
{
if (variables == null)
{
@@ -520,7 +520,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
}
// handle range expression
var rangeRegex = new Regex(@"{{\s*range\s*(.+?)\s*}}(.*?){{\.}}(.*?){{end}}");
var rangeRegex = new Regex(@"{{\s*range\s*(((?<index>\$.+?),)((\s*(?<element>.+?)\s*(:=)\s*)))?(?<variable>.+?)\s*}}(?<prefix>.*?){{\.}}(?<postfix>.*?){{end}}");
var rangeRegexMatches = rangeRegex.Match(template);
while (rangeRegexMatches.Success)
@@ -528,9 +528,13 @@ namespace NzbDrone.Core.Indexers.Cardigann
var expanded = string.Empty;
var all = rangeRegexMatches.Groups[0].Value;
var variable = rangeRegexMatches.Groups[1].Value;
var prefix = rangeRegexMatches.Groups[2].Value;
var postfix = rangeRegexMatches.Groups[3].Value;
var index = rangeRegexMatches.Groups["index"].Value;
var variable = rangeRegexMatches.Groups["variable"].Value;
var prefix = rangeRegexMatches.Groups["prefix"].Value;
var postfix = rangeRegexMatches.Groups["postfix"].Value;
var arrayIndex = 0;
var indexReplace = "{{" + index + "}}";
foreach (var value in (ICollection<string>)variables[variable])
{
@@ -540,7 +544,16 @@ namespace NzbDrone.Core.Indexers.Cardigann
newvalue = modifier(newvalue);
}
expanded += prefix + newvalue + postfix;
var indexValue = arrayIndex++;
if (index.IsNotNullOrWhiteSpace())
{
expanded += prefix.Replace(indexReplace, indexValue.ToString()) + newvalue + postfix.Replace(indexReplace, indexValue.ToString());
}
else
{
expanded += prefix + newvalue + postfix;
}
}
template = template.Replace(all, expanded);
@@ -60,7 +60,9 @@ namespace NzbDrone.Core.Indexers.Cardigann
if (request.SearchPath.Response != null && request.SearchPath.Response.Type.Equals("json"))
{
if (request.SearchPath.Response != null && request.SearchPath.Response.NoResultsMessage != null && (request.SearchPath.Response.NoResultsMessage.Equals(results) || (request.SearchPath.Response.NoResultsMessage == string.Empty && results == string.Empty)))
if (request.SearchPath.Response != null &&
request.SearchPath.Response.NoResultsMessage != null &&
((request.SearchPath.Response.NoResultsMessage != string.Empty && results.Contains(request.SearchPath.Response.NoResultsMessage)) || (request.SearchPath.Response.NoResultsMessage == string.Empty && results == string.Empty)))
{
return releases;
}
@@ -575,6 +577,13 @@ namespace NzbDrone.Core.Indexers.Cardigann
release.TvdbId = (int)ParseUtil.CoerceLong(tvdbId);
value = release.TvdbId.ToString();
break;
case "doubanid":
var doubanIDRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
var doubanIDMatch = doubanIDRegEx.Match(value);
var doubanID = doubanIDMatch.Groups[1].Value;
release.DoubanId = (int)ParseUtil.CoerceLong(doubanID);
value = release.DoubanId.ToString();
break;
case "poster":
if (!string.IsNullOrWhiteSpace(value))
{
@@ -91,6 +91,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
variables[".Query.IMDBID"] = searchCriteria.FullImdbId;
variables[".Query.IMDBIDShort"] = searchCriteria.ImdbId;
variables[".Query.TVDBID"] = searchCriteria.TvdbId?.ToString() ?? null;
variables[".Query.TMDBID"] = searchCriteria.TmdbId?.ToString() ?? null;
variables[".Query.TVRageID"] = searchCriteria.RId?.ToString() ?? null;
variables[".Query.TVMazeID"] = searchCriteria.TvMazeId?.ToString() ?? null;
variables[".Query.TraktID"] = searchCriteria.TraktId?.ToString() ?? null;
@@ -187,7 +187,7 @@ namespace NzbDrone.Core.Indexers.Newznab
}
if (capabilities.TvSearchParams != null &&
new[] { TvSearchParam.Q, TvSearchParam.TvdbId, TvSearchParam.RId }.Any(v => capabilities.TvSearchParams.Contains(v)) &&
new[] { TvSearchParam.Q, TvSearchParam.TvdbId, TvSearchParam.TmdbId, TvSearchParam.RId }.Any(v => capabilities.TvSearchParams.Contains(v)) &&
new[] { TvSearchParam.Season, TvSearchParam.Ep }.All(v => capabilities.TvSearchParams.Contains(v)))
{
return null;
@@ -125,6 +125,11 @@ namespace NzbDrone.Core.Indexers.Newznab
parameters.Add("tvdbid", searchCriteria.TvdbId.Value.ToString());
}
if (searchCriteria.TmdbId.HasValue && capabilities.TvSearchTvdbAvailable)
{
parameters.Add("tmdbid", searchCriteria.TvdbId.Value.ToString());
}
if (searchCriteria.ImdbId.IsNotNullOrWhiteSpace() && capabilities.TvSearchImdbAvailable)
{
parameters.Add("imdbid", searchCriteria.ImdbId);
@@ -96,7 +96,7 @@ namespace NzbDrone.Core.Indexers.Newznab
releaseInfo = base.ProcessItem(item, releaseInfo);
releaseInfo.ImdbId = GetIntAttribute(item, "imdb");
releaseInfo.TmdbId = GetIntAttribute(item, "tmdb");
releaseInfo.TmdbId = GetIntAttribute(item, "tmdbid");
releaseInfo.TvdbId = GetIntAttribute(item, "tvdbid");
releaseInfo.TvRageId = GetIntAttribute(item, "rageid");
releaseInfo.Grabs = GetIntAttribute(item, "grabs");