Add tests and ignore 0 in GetFullImdbId

pull/1682/head
Bogdan 1 year ago
parent 0fe54ed36a
commit 81b1c0e445

@ -63,5 +63,22 @@ namespace NzbDrone.Core.Test.ParserTests
{
ParseUtil.GetLongFromString(original).Should().Be(parsedInt);
}
[TestCase("tt0183790", "tt0183790")]
[TestCase("0183790", "tt0183790")]
[TestCase("183790", "tt0183790")]
[TestCase("tt10001870", "tt10001870")]
[TestCase("10001870", "tt10001870")]
[TestCase("tt", null)]
[TestCase("tt0", null)]
[TestCase("abc", null)]
[TestCase("abc0", null)]
[TestCase("0", null)]
[TestCase("", null)]
[TestCase(null, null)]
public void should_parse_full_imdb_id_from_string(string input, string expected)
{
ParseUtil.GetFullImdbId(input).Should().Be(expected);
}
}
}

@ -57,7 +57,7 @@ namespace NzbDrone.Core.IndexerSearch
{
var searchSpec = Get<MovieSearchCriteria>(request, indexerIds, interactiveSearch);
var imdbId = ParseUtil.GetImdbID(request.imdbid);
var imdbId = ParseUtil.GetImdbId(request.imdbid);
searchSpec.ImdbId = imdbId?.ToString("D7");
searchSpec.TmdbId = request.tmdbid;
@ -87,7 +87,7 @@ namespace NzbDrone.Core.IndexerSearch
{
var searchSpec = Get<TvSearchCriteria>(request, indexerIds, interactiveSearch);
var imdbId = ParseUtil.GetImdbID(request.imdbid);
var imdbId = ParseUtil.GetImdbId(request.imdbid);
searchSpec.ImdbId = imdbId?.ToString("D7");
searchSpec.Season = request.season;

@ -246,7 +246,7 @@ namespace NzbDrone.Core.Indexers.Definitions
// TODO: TMDb is also available
var qImdb = row.QuerySelector("a[href^=\"https://www.imdb.com\"]");
var imdb = qImdb != null ? ParseUtil.GetImdbID(qImdb.GetAttribute("href").Split('/').Last()) : null;
var imdb = qImdb != null ? ParseUtil.GetImdbId(qImdb.GetAttribute("href").Split('/').Last()) : null;
var release = new TorrentInfo
{

@ -75,7 +75,7 @@ namespace NzbDrone.Core.Indexers.Definitions.Avistaz
if (row.MovieTvinfo != null)
{
release.ImdbId = ParseUtil.GetImdbID(row.MovieTvinfo.Imdb).GetValueOrDefault();
release.ImdbId = ParseUtil.GetImdbId(row.MovieTvinfo.Imdb).GetValueOrDefault();
release.TmdbId = row.MovieTvinfo.Tmdb.IsNullOrWhiteSpace() ? 0 : ParseUtil.TryCoerceInt(row.MovieTvinfo.Tmdb, out var tmdbResult) ? tmdbResult : 0;
release.TvdbId = row.MovieTvinfo.Tvdb.IsNullOrWhiteSpace() ? 0 : ParseUtil.TryCoerceInt(row.MovieTvinfo.Tvdb, out var tvdbResult) ? tvdbResult : 0;
}

@ -209,7 +209,7 @@ namespace NzbDrone.Core.Indexers.Definitions
// BHD can return crazy values for tmdb
var tmdbId = row.TmdbId.IsNullOrWhiteSpace() ? 0 : ParseUtil.TryCoerceInt(row.TmdbId.Split("/")[1], out var tmdbResult) ? tmdbResult : 0;
var imdbId = ParseUtil.GetImdbID(row.ImdbId).GetValueOrDefault();
var imdbId = ParseUtil.GetImdbId(row.ImdbId).GetValueOrDefault();
var release = new TorrentInfo
{

@ -192,7 +192,7 @@ public class GreatPosterWallParser : GazelleParser
MinimumSeedTime = 172800 // 48 hours
};
var imdbId = ParseUtil.GetImdbID(result.ImdbId);
var imdbId = ParseUtil.GetImdbId(result.ImdbId);
if (imdbId != null)
{
release.ImdbId = (int)imdbId;

@ -20,7 +20,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
{
var pageableRequests = new IndexerPageableRequestChain();
var query = new TorrentQuery();
var imdbId = ParseUtil.GetImdbID(searchCriteria.ImdbId).GetValueOrDefault(0);
var imdbId = ParseUtil.GetImdbId(searchCriteria.ImdbId).GetValueOrDefault(0);
if (searchCriteria.Categories?.Length > 0)
{
@ -78,7 +78,7 @@ namespace NzbDrone.Core.Indexers.Definitions.HDBits
var pageableRequests = new IndexerPageableRequestChain();
var query = new TorrentQuery();
var tvdbId = searchCriteria.TvdbId.GetValueOrDefault(0);
var imdbId = ParseUtil.GetImdbID(searchCriteria.ImdbId).GetValueOrDefault(0);
var imdbId = ParseUtil.GetImdbId(searchCriteria.ImdbId).GetValueOrDefault(0);
if (searchCriteria.Categories?.Length > 0)
{

@ -282,7 +282,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var imdbLink = row.QuerySelector("td:nth-child(2) a[href*=imdb]");
if (imdbLink != null)
{
release.ImdbId = ParseUtil.GetImdbID(imdbLink.GetAttribute("href").Split('/').Last()).GetValueOrDefault();
release.ImdbId = ParseUtil.GetImdbId(imdbLink.GetAttribute("href").Split('/').Last()).GetValueOrDefault();
}
//"July 11, 2015, 13:34:09", "Today|Yesterday at 20:04:23"

@ -328,7 +328,7 @@ namespace NzbDrone.Core.Indexers.Definitions
}
var imdbLink = row.QuerySelector("a[href*=\"www.imdb.com/title/\"]")?.GetAttribute("href");
var imdb = !string.IsNullOrWhiteSpace(imdbLink) ? ParseUtil.GetImdbID(imdbLink) : null;
var imdb = !string.IsNullOrWhiteSpace(imdbLink) ? ParseUtil.GetImdbId(imdbLink) : null;
var flags = new HashSet<IndexerFlag>();

@ -313,7 +313,7 @@ public class NorBitsParser : IParseIndexerResponse
}
var imdbLink = row.QuerySelector("a[href*=\"imdb.com/title/tt\"]")?.GetAttribute("href");
release.ImdbId = ParseUtil.GetImdbID(imdbLink) ?? 0;
release.ImdbId = ParseUtil.GetImdbId(imdbLink) ?? 0;
if (row.QuerySelector("img[title=\"100% freeleech\"]") != null)
{

@ -180,7 +180,7 @@ public class PixelHDParser : IParseIndexerResponse
var groupName = group.QuerySelector("strong:has(a[title=\"View Torrent\"])")?.TextContent.Replace(" ]", "]");
var imdbLink = group.QuerySelector("a[href*=\"imdb.com/title/tt\"]")?.GetAttribute("href");
var imdbId = ParseUtil.GetImdbID(imdbLink) ?? 0;
var imdbId = ParseUtil.GetImdbId(imdbLink) ?? 0;
var rows = group.QuerySelectorAll("tr.group_torrent:has(a[href^=\"torrents.php?id=\"])");
foreach (var row in rows)

@ -286,7 +286,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var category = row.QuerySelector(".br_type > a").GetAttribute("href").Replace("browse.php?cat=", string.Empty);
var qImdb = row.QuerySelector("a[href*=\"www.imdb.com/\"]");
var imdb = qImdb != null ? ParseUtil.GetImdbID(qImdb.GetAttribute("href").Split('/').Last()) : null;
var imdb = qImdb != null ? ParseUtil.GetImdbId(qImdb.GetAttribute("href").Split('/').Last()) : null;
var release = new TorrentInfo
{

@ -213,7 +213,7 @@ namespace NzbDrone.Core.Indexers.Definitions
Files = item.Value<int>("numfiles"),
Seeders = item.Value<int>("seeders"),
Peers = item.Value<int>("leechers") + item.Value<int>("seeders"),
ImdbId = ParseUtil.GetImdbID(item.Value<string>("imdbid")) ?? 0,
ImdbId = ParseUtil.GetImdbId(item.Value<string>("imdbid")) ?? 0,
MinimumRatio = 1,
MinimumSeedTime = 0,
DownloadVolumeFactor = dlVolumeFactor,

@ -262,7 +262,7 @@ namespace NzbDrone.Core.Indexers.Definitions
Title = CleanTitle(torrent.Name),
Description = torrent.ShortDescription,
Size = torrent.Size,
ImdbId = ParseUtil.GetImdbID(torrent.ImdbId).GetValueOrDefault(),
ImdbId = ParseUtil.GetImdbId(torrent.ImdbId).GetValueOrDefault(),
DownloadUrl = $"{_settings.BaseUrl}api/torrent/{torrent.Id}/download",
PosterUrl = torrent.Poster,
InfoUrl = torrent.Url,

@ -244,7 +244,7 @@ namespace NzbDrone.Core.Indexers.Definitions
var downloadMultiplier = (double?)row["download-multiplier"] ?? 1;
var link = new Uri(_settings.BaseUrl + "download.php/" + torrentId + "/" + torrentId + ".torrent");
var publishDate = DateTimeUtil.UnixTimestampToDateTime((long)row.ctime).ToLocalTime();
var imdb = ParseUtil.GetImdbID(imdbId) ?? 0;
var imdb = ParseUtil.GetImdbId(imdbId) ?? 0;
var release = new TorrentInfo
{

@ -60,7 +60,7 @@ namespace NzbDrone.Core.Indexers.Definitions.UNIT3D
Files = row.Attributes.Files,
Grabs = row.Attributes.Grabs,
Seeders = row.Attributes.Seeders,
ImdbId = ParseUtil.GetImdbID(row.Attributes.ImdbId).GetValueOrDefault(),
ImdbId = ParseUtil.GetImdbId(row.Attributes.ImdbId).GetValueOrDefault(),
TmdbId = row.Attributes.TmdbId.IsNullOrWhiteSpace() ? 0 : ParseUtil.CoerceInt(row.Attributes.TmdbId),
TvdbId = row.Attributes.TvdbId.IsNullOrWhiteSpace() ? 0 : ParseUtil.CoerceInt(row.Attributes.TvdbId),
Peers = row.Attributes.Leechers + row.Attributes.Seeders,

@ -8,7 +8,7 @@ namespace NzbDrone.Core.Parser
{
public static class ParseUtil
{
private static readonly Regex ImdbId = new Regex(@"^(?:tt)?(\d{1,8})$", RegexOptions.Compiled);
private static readonly Regex ImdbIdRegex = new (@"^(?:tt)?(\d{1,8})$", RegexOptions.Compiled);
public static string NormalizeMultiSpaces(string s) =>
new Regex(@"\s+").Replace(s.Trim(), " ");
@ -85,14 +85,15 @@ namespace NzbDrone.Core.Parser
return CoerceLong(extractedLong);
}
public static int? GetImdbID(string imdbstr)
public static int? GetImdbId(string value)
{
if (imdbstr == null)
if (value == null)
{
return null;
}
var match = ImdbId.Match(imdbstr);
var match = ImdbIdRegex.Match(value);
if (!match.Success)
{
return null;
@ -101,17 +102,16 @@ namespace NzbDrone.Core.Parser
return int.Parse(match.Groups[1].Value, NumberStyles.Any, CultureInfo.InvariantCulture);
}
public static string GetFullImdbId(string imdbstr)
public static string GetFullImdbId(string value)
{
var imdbid = GetImdbID(imdbstr);
if (imdbid == null)
var imdbId = GetImdbId(value);
if (imdbId is null or 0)
{
return null;
}
var imdbLen = ((int)imdbid > 9999999) ? "D8" : "D7";
return "tt" + ((int)imdbid).ToString(imdbLen);
return $"tt{imdbId.GetValueOrDefault():D7}";
}
public static string GetArgumentFromQueryString(string url, string argument)

Loading…
Cancel
Save