Fixed: Cardigann InfoUrls

This commit is contained in:
Qstick
2021-03-31 23:19:50 -04:00
parent f4d4c01faa
commit a0dec09a14
3 changed files with 48 additions and 156 deletions

View File

@@ -27,7 +27,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse) public IList<ReleaseInfo> ParseResponse(IndexerResponse indexerResponse)
{ {
var releases = new List<CardigannReleaseInfo>(); var releases = new List<ReleaseInfo>();
_logger.Debug("Parsing"); _logger.Debug("Parsing");
@@ -103,7 +103,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
{ {
try try
{ {
var release = new CardigannReleaseInfo(); var release = new TorrentInfo();
// Parse fields // Parse fields
foreach (var field in search.Fields) foreach (var field in search.Fields)
@@ -127,53 +127,41 @@ namespace NzbDrone.Core.Indexers.Cardigann
if (string.IsNullOrEmpty(value)) if (string.IsNullOrEmpty(value))
{ {
value = null; value = null;
release.Link = null; release.DownloadUrl = null;
break; break;
} }
if (value.StartsWith("magnet:")) if (value.StartsWith("magnet:"))
{ {
release.MagnetUri = new Uri(value); release.MagnetUrl = value;
value = release.MagnetUri.ToString(); value = release.MagnetUrl;
} }
else else
{ {
release.Link = ResolvePath(value, searchUrlUri); release.DownloadUrl = ResolvePath(value, searchUrlUri).AbsoluteUri;
value = release.Link.ToString(); value = release.DownloadUrl;
} }
break; break;
case "magnet": case "magnet":
var magnetUri = new Uri(value); var magnetUri = value;
release.MagnetUri = magnetUri; release.MagnetUrl = magnetUri;
value = magnetUri.ToString(); value = magnetUri.ToString();
if (release.Guid == null) break;
{ case "infohash":
release.Guid = magnetUri; release.InfoHash = value;
}
break; break;
case "details": case "details":
var url = ResolvePath(value, searchUrlUri); var url = ResolvePath(value, searchUrlUri)?.AbsoluteUri;
release.InfoUrl = url;
release.Guid = url; release.Guid = url;
release.Comments = url;
if (release.Guid == null)
{
release.Guid = url;
}
value = url.ToString(); value = url.ToString();
break; break;
case "comments": case "comments":
var commentsUrl = ResolvePath(value, searchUrlUri); var commentsUrl = ResolvePath(value, searchUrlUri);
if (release.Comments == null) if (release.CommentUrl == null)
{ {
release.Comments = commentsUrl; release.CommentUrl = commentsUrl.AbsoluteUri;
}
if (release.Guid == null)
{
release.Guid = commentsUrl;
} }
value = commentsUrl.ToString(); value = commentsUrl.ToString();
@@ -219,7 +207,7 @@ namespace NzbDrone.Core.Indexers.Cardigann
value = release.Category.ToString(); value = release.Category.ToString();
break; break;
case "size": case "size":
release.Size = CardigannReleaseInfo.GetBytes(value); release.Size = ReleaseInfo.GetBytes(value);
value = release.Size.ToString(); value = release.Size.ToString();
break; break;
case "leechers": case "leechers":
@@ -227,17 +215,17 @@ namespace NzbDrone.Core.Indexers.Cardigann
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 = (int)leechers;
} }
else else
{ {
release.Peers += leechers; release.Peers += (int)leechers;
} }
value = leechers.ToString(); value = leechers.ToString();
break; break;
case "seeders": case "seeders":
release.Seeders = ParseUtil.CoerceLong(value); release.Seeders = ParseUtil.CoerceInt(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)
{ {
@@ -255,11 +243,11 @@ namespace NzbDrone.Core.Indexers.Cardigann
value = release.PublishDate.ToString(DateTimeUtil.Rfc1123ZPattern); value = release.PublishDate.ToString(DateTimeUtil.Rfc1123ZPattern);
break; break;
case "files": case "files":
release.Files = ParseUtil.CoerceLong(value); release.Files = ParseUtil.CoerceInt(value);
value = release.Files.ToString(); value = release.Files.ToString();
break; break;
case "grabs": case "grabs":
release.Grabs = ParseUtil.CoerceLong(value); release.Grabs = ParseUtil.CoerceInt(value);
value = release.Grabs.ToString(); value = release.Grabs.ToString();
break; break;
case "downloadvolumefactor": case "downloadvolumefactor":
@@ -279,45 +267,46 @@ namespace NzbDrone.Core.Indexers.Cardigann
value = release.MinimumSeedTime.ToString(); value = release.MinimumSeedTime.ToString();
break; break;
case "imdb": case "imdb":
release.Imdb = ParseUtil.GetLongFromString(value); release.ImdbId = (int)ParseUtil.GetLongFromString(value);
value = release.Imdb.ToString(); value = release.ImdbId.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.TmdbId = (int)ParseUtil.CoerceLong(tmdbID);
value = release.TMDb.ToString(); value = release.TmdbId.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.TvRageId = (int)ParseUtil.CoerceLong(rageID);
value = release.RageID.ToString(); value = release.TvRageId.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 = (int)ParseUtil.CoerceLong(tvdbId);
value = release.TVDBId.ToString(); value = release.TvdbId.ToString();
break; break;
case "author":
release.Author = value;
break;
case "booktitle":
release.BookTitle = value;
break;
case "banner":
if (!string.IsNullOrWhiteSpace(value))
{
var bannerurl = ResolvePath(value, searchUrlUri);
release.BannerUrl = bannerurl;
}
value = release.BannerUrl.ToString(); //case "author":
break; // release.Author = value;
// break;
//case "booktitle":
// release.BookTitle = value;
// break;
//case "banner":
// if (!string.IsNullOrWhiteSpace(value))
// {
// var bannerurl = ResolvePath(value, searchUrlUri);
// release.BannerUrl = bannerurl;
// }
// value = release.BannerUrl.ToString();
// break;
default: default:
break; break;
} }
@@ -474,29 +463,9 @@ namespace NzbDrone.Core.Indexers.Cardigann
releases = releases.Take(query.Limit).ToList(); releases = releases.Take(query.Limit).ToList();
}*/ }*/
var result = new List<ReleaseInfo>(); _logger.Debug($"Got {releases.Count} releases");
result.AddRange(releases.Select(x => new TorrentInfo return releases;
{
PublishDate = x.PublishDate,
Guid = x.Guid.ToString(),
Title = x.Title,
Size = x.Size.Value,
DownloadUrl = x.Link.AbsoluteUri,
CommentUrl = x.Comments?.ToString(),
InfoUrl = x.Link?.ToString(),
MagnetUrl = x.MagnetUri?.AbsoluteUri,
InfoHash = x.InfoHash,
Seeders = (int?)x.Seeders,
Peers = (int?)x.Peers,
Grabs = (int?)x.Grabs,
Files = (int?)x.Files,
Category = x.Category
}));
_logger.Debug($"Got {result.Count} releases");
return result;
} }
} }
} }

View File

@@ -1,78 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using NzbDrone.Core.Parser;
namespace NzbDrone.Core.Indexers.Cardigann
{
public class CardigannReleaseInfo
{
public string Title { get; set; }
public Uri Guid { get; set; }
public Uri Link { get; set; }
public Uri Comments { get; set; }
public DateTime PublishDate { get; set; }
public ICollection<IndexerCategory> Category { get; set; }
public long? Size { get; set; }
public long? Files { get; set; }
public long? Grabs { get; set; }
public string Description { get; set; }
public long? RageID { get; set; }
public long? TVDBId { get; set; }
public long? Imdb { get; set; }
public long? TMDb { get; set; }
public string Author { get; set; }
public string BookTitle { get; set; }
public long? Seeders { get; set; }
public long? Peers { get; set; }
public Uri BannerUrl { get; set; }
public string InfoHash { get; set; }
public Uri MagnetUri { get; set; }
public double? MinimumRatio { get; set; }
public long? MinimumSeedTime { get; set; }
public double? DownloadVolumeFactor { get; set; }
public double? UploadVolumeFactor { get; set; }
public static long GetBytes(string str)
{
var valStr = new string(str.Where(c => char.IsDigit(c) || c == '.').ToArray());
var unit = new string(str.Where(char.IsLetter).ToArray());
var val = ParseUtil.CoerceFloat(valStr);
return GetBytes(unit, val);
}
public static long GetBytes(string unit, float value)
{
unit = unit.Replace("i", "").ToLowerInvariant();
if (unit.Contains("kb"))
{
return BytesFromKB(value);
}
if (unit.Contains("mb"))
{
return BytesFromMB(value);
}
if (unit.Contains("gb"))
{
return BytesFromGB(value);
}
if (unit.Contains("tb"))
{
return BytesFromTB(value);
}
return (long)value;
}
public static long BytesFromTB(float tb) => BytesFromGB(tb * 1024f);
public static long BytesFromGB(float gb) => BytesFromMB(gb * 1024f);
public static long BytesFromMB(float mb) => BytesFromKB(mb * 1024f);
public static long BytesFromKB(float kb) => (long)(kb * 1024f);
}
}

View File

@@ -10,6 +10,7 @@ namespace NzbDrone.Core.Parser.Model
{ {
public string Guid { get; set; } public string Guid { get; set; }
public string Title { get; set; } public string Title { get; set; }
public string Description { get; set; }
public long? Size { get; set; } public long? Size { get; set; }
public string DownloadUrl { get; set; } public string DownloadUrl { get; set; }
public string InfoUrl { get; set; } public string InfoUrl { get; set; }