mirror of https://github.com/Jackett/Jackett
cardigann: minor improvements (#14070)
This commit is contained in:
parent
ff305cdef7
commit
b751db6936
|
@ -304,10 +304,10 @@ namespace Jackett.Common.Indexers
|
||||||
protected delegate string TemplateTextModifier(string str);
|
protected delegate string TemplateTextModifier(string str);
|
||||||
protected string applyGoTemplateText(string template, Dictionary<string, object> variables = null, TemplateTextModifier modifier = null)
|
protected string applyGoTemplateText(string template, Dictionary<string, object> variables = null, TemplateTextModifier modifier = null)
|
||||||
{
|
{
|
||||||
if (variables == null)
|
if (string.IsNullOrWhiteSpace(template) || !template.Contains("{{"))
|
||||||
{
|
return template;
|
||||||
variables = GetBaseTemplateVariables();
|
|
||||||
}
|
variables ??= GetBaseTemplateVariables();
|
||||||
|
|
||||||
// handle re_replace expression
|
// handle re_replace expression
|
||||||
// Example: {{ re_replace .Query.Keywords "[^a-zA-Z0-9]+" "%" }}
|
// Example: {{ re_replace .Query.Keywords "[^a-zA-Z0-9]+" "%" }}
|
||||||
|
@ -495,21 +495,20 @@ namespace Jackett.Common.Indexers
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle simple variables
|
// handle simple variables
|
||||||
var VariablesRegEx = new Regex(@"{{\s*(\..+?)\s*}}");
|
var variablesRegex = new Regex(@"{{\s*(\..+?)\s*}}");
|
||||||
var VariablesRegExMatches = VariablesRegEx.Match(template);
|
var variablesRegexMatches = variablesRegex.Match(template);
|
||||||
|
|
||||||
while (VariablesRegExMatches.Success)
|
while (variablesRegexMatches.Success)
|
||||||
{
|
{
|
||||||
var expanded = string.Empty;
|
var all = variablesRegexMatches.Groups[0].Value;
|
||||||
|
var variable = variablesRegexMatches.Groups[1].Value;
|
||||||
var all = VariablesRegExMatches.Groups[0].Value;
|
|
||||||
var variable = VariablesRegExMatches.Groups[1].Value;
|
|
||||||
|
|
||||||
var value = (string)variables[variable];
|
var value = (string)variables[variable];
|
||||||
if (modifier != null)
|
if (modifier != null)
|
||||||
value = modifier(value);
|
value = modifier(value);
|
||||||
|
|
||||||
template = template.Replace(all, value);
|
template = template.Replace(all, value);
|
||||||
VariablesRegExMatches = VariablesRegExMatches.NextMatch();
|
variablesRegexMatches = variablesRegexMatches.NextMatch();
|
||||||
}
|
}
|
||||||
|
|
||||||
return template;
|
return template;
|
||||||
|
@ -2014,7 +2013,7 @@ namespace Jackett.Common.Indexers
|
||||||
value = release.Size.ToString();
|
value = release.Size.ToString();
|
||||||
break;
|
break;
|
||||||
case "leechers":
|
case "leechers":
|
||||||
var leechers = ReleaseInfo.GetBytes(value);
|
var leechers = ParseUtil.CoerceLong(value);
|
||||||
leechers = leechers < 5000000L ? leechers : 0; // to fix #6558
|
leechers = leechers < 5000000L ? leechers : 0; // to fix #6558
|
||||||
if (release.Peers == null)
|
if (release.Peers == null)
|
||||||
release.Peers = leechers;
|
release.Peers = leechers;
|
||||||
|
@ -2023,7 +2022,7 @@ namespace Jackett.Common.Indexers
|
||||||
value = leechers.ToString();
|
value = leechers.ToString();
|
||||||
break;
|
break;
|
||||||
case "seeders":
|
case "seeders":
|
||||||
release.Seeders = ReleaseInfo.GetBytes(value);
|
release.Seeders = ParseUtil.CoerceLong(value);
|
||||||
release.Seeders = release.Seeders < 5000000L ? release.Seeders : 0; // to fix #6558
|
release.Seeders = release.Seeders < 5000000L ? release.Seeders : 0; // to fix #6558
|
||||||
if (release.Peers == null)
|
if (release.Peers == null)
|
||||||
release.Peers = release.Seeders;
|
release.Peers = release.Seeders;
|
||||||
|
@ -2036,11 +2035,11 @@ namespace Jackett.Common.Indexers
|
||||||
value = release.PublishDate.ToString(DateTimeUtil.Rfc1123ZPattern);
|
value = release.PublishDate.ToString(DateTimeUtil.Rfc1123ZPattern);
|
||||||
break;
|
break;
|
||||||
case "files":
|
case "files":
|
||||||
release.Files = ReleaseInfo.GetBytes(value);
|
release.Files = ParseUtil.CoerceLong(value);
|
||||||
value = release.Files.ToString();
|
value = release.Files.ToString();
|
||||||
break;
|
break;
|
||||||
case "grabs":
|
case "grabs":
|
||||||
release.Grabs = ReleaseInfo.GetBytes(value);
|
release.Grabs = ParseUtil.CoerceLong(value);
|
||||||
value = release.Grabs.ToString();
|
value = release.Grabs.ToString();
|
||||||
break;
|
break;
|
||||||
case "downloadvolumefactor":
|
case "downloadvolumefactor":
|
||||||
|
@ -2065,58 +2064,58 @@ namespace Jackett.Common.Indexers
|
||||||
value = release.Imdb.ToString();
|
value = release.Imdb.ToString();
|
||||||
break;
|
break;
|
||||||
case "tmdbid":
|
case "tmdbid":
|
||||||
var TmdbIDRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
|
var tmdbIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
|
||||||
var TmdbIDMatch = TmdbIDRegEx.Match(value);
|
var tmdbIdMatch = tmdbIdRegex.Match(value);
|
||||||
var TmdbID = TmdbIDMatch.Groups[1].Value;
|
var tmdbId = tmdbIdMatch.Groups[1].Value;
|
||||||
release.TMDb = ParseUtil.CoerceLong(TmdbID);
|
release.TMDb = ParseUtil.CoerceLong(tmdbId);
|
||||||
value = release.TMDb.ToString();
|
value = release.TMDb.ToString();
|
||||||
break;
|
break;
|
||||||
case "rageid":
|
case "rageid":
|
||||||
var RageIDRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
|
var rageIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
|
||||||
var RageIDMatch = RageIDRegEx.Match(value);
|
var rageIdMatch = rageIdRegex.Match(value);
|
||||||
var RageID = RageIDMatch.Groups[1].Value;
|
var rageId = rageIdMatch.Groups[1].Value;
|
||||||
release.RageID = ParseUtil.CoerceLong(RageID);
|
release.RageID = ParseUtil.CoerceLong(rageId);
|
||||||
value = release.RageID.ToString();
|
value = release.RageID.ToString();
|
||||||
break;
|
break;
|
||||||
case "tvdbid":
|
case "tvdbid":
|
||||||
var TVDBIdRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
|
var tvdbIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
|
||||||
var TVDBIdMatch = TVDBIdRegEx.Match(value);
|
var tvdbIdMatch = tvdbIdRegex.Match(value);
|
||||||
var TVDBId = TVDBIdMatch.Groups[1].Value;
|
var tvdbId = tvdbIdMatch.Groups[1].Value;
|
||||||
release.TVDBId = ParseUtil.CoerceLong(TVDBId);
|
release.TVDBId = ParseUtil.CoerceLong(tvdbId);
|
||||||
value = release.TVDBId.ToString();
|
value = release.TVDBId.ToString();
|
||||||
break;
|
break;
|
||||||
case "tvmazeid":
|
case "tvmazeid":
|
||||||
var TVMazeIdRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
|
var tvMazeIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
|
||||||
var TVMazeIdMatch = TVMazeIdRegEx.Match(value);
|
var tvMazeIdMatch = tvMazeIdRegex.Match(value);
|
||||||
var TVMazeId = TVMazeIdMatch.Groups[1].Value;
|
var tvMazeId = tvMazeIdMatch.Groups[1].Value;
|
||||||
release.TVMazeId = ParseUtil.CoerceLong(TVMazeId);
|
release.TVMazeId = ParseUtil.CoerceLong(tvMazeId);
|
||||||
value = release.TVMazeId.ToString();
|
value = release.TVMazeId.ToString();
|
||||||
break;
|
break;
|
||||||
case "traktid":
|
case "traktid":
|
||||||
var TraktIdRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
|
var traktIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
|
||||||
var TraktIdMatch = TraktIdRegEx.Match(value);
|
var traktIdMatch = traktIdRegex.Match(value);
|
||||||
var TraktId = TraktIdMatch.Groups[1].Value;
|
var traktId = traktIdMatch.Groups[1].Value;
|
||||||
release.TraktId = ParseUtil.CoerceLong(TraktId);
|
release.TraktId = ParseUtil.CoerceLong(traktId);
|
||||||
value = release.TraktId.ToString();
|
value = release.TraktId.ToString();
|
||||||
break;
|
break;
|
||||||
case "doubanid":
|
case "doubanid":
|
||||||
var DoubanIDRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
|
var doubanIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
|
||||||
var DoubanIDMatch = DoubanIDRegEx.Match(value);
|
var doubanIdMatch = doubanIdRegex.Match(value);
|
||||||
var DoubanID = DoubanIDMatch.Groups[1].Value;
|
var doubanId = doubanIdMatch.Groups[1].Value;
|
||||||
release.DoubanId = ParseUtil.CoerceLong(DoubanID);
|
release.DoubanId = ParseUtil.CoerceLong(doubanId);
|
||||||
value = release.DoubanId.ToString();
|
value = release.DoubanId.ToString();
|
||||||
break;
|
break;
|
||||||
case "genre":
|
case "genre":
|
||||||
if (release.Genres == null)
|
if (release.Genres == null)
|
||||||
release.Genres = new List<string>();
|
release.Genres = new List<string>();
|
||||||
char[] delimiters = { ',', ' ', '/', ')', '(', '.', ';', '[', ']', '"', '|', ':' };
|
char[] delimiters = { ',', ' ', '/', ')', '(', '.', ';', '[', ']', '"', '|', ':' };
|
||||||
var releaseGenres = release.Genres.Union(value.Split(delimiters, System.StringSplitOptions.RemoveEmptyEntries));
|
var releaseGenres = release.Genres.Union(value.Split(delimiters, StringSplitOptions.RemoveEmptyEntries));
|
||||||
releaseGenres = releaseGenres.Select(x => x.Replace("_", " "));
|
releaseGenres = releaseGenres.Select(x => x.Replace("_", " "));
|
||||||
release.Genres = releaseGenres.ToList();
|
release.Genres = releaseGenres.ToList();
|
||||||
value = string.Join(",", release.Genres);
|
value = string.Join(",", release.Genres);
|
||||||
break;
|
break;
|
||||||
case "year":
|
case "year":
|
||||||
release.Year = ReleaseInfo.GetBytes(value);
|
release.Year = ParseUtil.CoerceLong(value);
|
||||||
value = release.Year.ToString();
|
value = release.Year.ToString();
|
||||||
break;
|
break;
|
||||||
case "author":
|
case "author":
|
||||||
|
|
|
@ -18,10 +18,32 @@ namespace Jackett.Common.Utils
|
||||||
public static string NormalizeMultiSpaces(string s) =>
|
public static string NormalizeMultiSpaces(string s) =>
|
||||||
new Regex(@"\s+").Replace(NormalizeSpace(s), " ");
|
new Regex(@"\s+").Replace(NormalizeSpace(s), " ");
|
||||||
|
|
||||||
public static string NormalizeNumber(string s) =>
|
private static string NormalizeNumber(string s, bool isInt = false)
|
||||||
NormalizeSpace(s)
|
{
|
||||||
.Replace("-", "0")
|
var valStr = new string(s.Where(c => char.IsDigit(c) || c == '.' || c == ',').ToArray());
|
||||||
.Replace(",", "");
|
|
||||||
|
valStr = valStr.Trim().Replace("-", "0");
|
||||||
|
|
||||||
|
if (isInt)
|
||||||
|
{
|
||||||
|
if (valStr.Contains(',') && valStr.Contains('.'))
|
||||||
|
return valStr;
|
||||||
|
|
||||||
|
valStr = valStr.Length == 0 ? "0" : valStr.Replace(".", ",");
|
||||||
|
|
||||||
|
return valStr;
|
||||||
|
}
|
||||||
|
|
||||||
|
valStr = valStr.Length == 0 ? "0" : valStr.Replace(",", ".");
|
||||||
|
|
||||||
|
if (valStr.Count(c => c == '.') > 1)
|
||||||
|
{
|
||||||
|
var lastOcc = valStr.LastIndexOf('.');
|
||||||
|
valStr = valStr.Substring(0, lastOcc).Replace(".", string.Empty) + valStr.Substring(lastOcc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return valStr;
|
||||||
|
}
|
||||||
|
|
||||||
public static string RemoveInvalidXmlChars(string text) => string.IsNullOrEmpty(text) ? "" : InvalidXmlChars.Replace(text, "");
|
public static string RemoveInvalidXmlChars(string text) => string.IsNullOrEmpty(text) ? "" : InvalidXmlChars.Replace(text, "");
|
||||||
|
|
||||||
|
@ -29,17 +51,17 @@ namespace Jackett.Common.Utils
|
||||||
|
|
||||||
public static float CoerceFloat(string str) => float.Parse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture);
|
public static float CoerceFloat(string str) => float.Parse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
public static int CoerceInt(string str) => int.Parse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture);
|
public static int CoerceInt(string str) => int.Parse(NormalizeNumber(str, true), NumberStyles.Any, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
public static long CoerceLong(string str) => long.Parse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture);
|
public static long CoerceLong(string str) => long.Parse(NormalizeNumber(str, true), NumberStyles.Any, CultureInfo.InvariantCulture);
|
||||||
|
|
||||||
public static bool TryCoerceDouble(string str, out double result) => double.TryParse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
public static bool TryCoerceDouble(string str, out double result) => double.TryParse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
||||||
|
|
||||||
public static bool TryCoerceFloat(string str, out float result) => float.TryParse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
public static bool TryCoerceFloat(string str, out float result) => float.TryParse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
||||||
|
|
||||||
public static bool TryCoerceInt(string str, out int result) => int.TryParse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
public static bool TryCoerceInt(string str, out int result) => int.TryParse(NormalizeNumber(str, true), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
||||||
|
|
||||||
public static bool TryCoerceLong(string str, out long result) => long.TryParse(NormalizeNumber(str), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
public static bool TryCoerceLong(string str, out long result) => long.TryParse(NormalizeNumber(str, true), NumberStyles.Any, CultureInfo.InvariantCulture, out result);
|
||||||
|
|
||||||
public static string GetArgumentFromQueryString(string url, string argument)
|
public static string GetArgumentFromQueryString(string url, string argument)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue