cardigann: improve GetLongFromString and parse fields (#14094)

This commit is contained in:
Bogdan 2023-02-25 23:11:53 +02:00 committed by GitHub
parent f7e6884720
commit a99093386a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 25 additions and 31 deletions

View File

@ -2068,45 +2068,27 @@ namespace Jackett.Common.Indexers
value = release.Imdb.ToString();
break;
case "tmdbid":
var tmdbIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
var tmdbIdMatch = tmdbIdRegex.Match(value);
var tmdbId = tmdbIdMatch.Groups[1].Value;
release.TMDb = ParseUtil.CoerceLong(tmdbId);
release.TMDb = ParseUtil.GetLongFromString(value);
value = release.TMDb.ToString();
break;
case "rageid":
var rageIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
var rageIdMatch = rageIdRegex.Match(value);
var rageId = rageIdMatch.Groups[1].Value;
release.RageID = ParseUtil.CoerceLong(rageId);
release.RageID = ParseUtil.GetLongFromString(value);
value = release.RageID.ToString();
break;
case "tvdbid":
var tvdbIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
var tvdbIdMatch = tvdbIdRegex.Match(value);
var tvdbId = tvdbIdMatch.Groups[1].Value;
release.TVDBId = ParseUtil.CoerceLong(tvdbId);
release.TVDBId = ParseUtil.GetLongFromString(value);
value = release.TVDBId.ToString();
break;
case "tvmazeid":
var tvMazeIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
var tvMazeIdMatch = tvMazeIdRegex.Match(value);
var tvMazeId = tvMazeIdMatch.Groups[1].Value;
release.TVMazeId = ParseUtil.CoerceLong(tvMazeId);
release.TVMazeId = ParseUtil.GetLongFromString(value);
value = release.TVMazeId.ToString();
break;
case "traktid":
var traktIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
var traktIdMatch = traktIdRegex.Match(value);
var traktId = traktIdMatch.Groups[1].Value;
release.TraktId = ParseUtil.CoerceLong(traktId);
release.TraktId = ParseUtil.GetLongFromString(value);
value = release.TraktId.ToString();
break;
case "doubanid":
var doubanIdRegex = new Regex(@"(\d+)", RegexOptions.Compiled);
var doubanIdMatch = doubanIdRegex.Match(value);
var doubanId = doubanIdMatch.Groups[1].Value;
release.DoubanId = ParseUtil.CoerceLong(doubanId);
release.DoubanId = ParseUtil.GetLongFromString(value);
value = release.DoubanId.ToString();
break;
case "genre":

View File

@ -75,14 +75,25 @@ namespace Jackett.Common.Utils
public static long? GetLongFromString(string str)
{
if (str == null)
if (string.IsNullOrWhiteSpace(str))
return null;
var IdRegEx = new Regex(@"(\d+)", RegexOptions.Compiled);
var IdMatch = IdRegEx.Match(str);
if (!IdMatch.Success)
return null;
var Id = IdMatch.Groups[1].Value;
return CoerceLong(Id);
var extractedLong = string.Empty;
foreach (var c in str)
{
if (c < '0' || c > '9')
{
if (extractedLong.Length > 0)
break;
continue;
}
extractedLong += c;
}
return CoerceLong(extractedLong);
}
public static int? GetImdbID(string imdbstr)

View File

@ -89,6 +89,7 @@ namespace Jackett.Test.Common.Utils
[TestCase("1", 1)]
[TestCase("1000 grabs", 1000)]
[TestCase("asdf123asdf", 123)]
[TestCase("asdf123asdf456asdf", 123)]
public void should_parse_long_from_string(string original, long? parsedInt)
{
ParseUtil.GetLongFromString(original).Should().Be(parsedInt);