erai-raws: Fix handling RSS items without links (#12497) resolves #12486

This commit is contained in:
6cUbi57z
2021-11-01 20:15:53 +00:00
committed by GitHub
parent b7577ef3ed
commit 1c599ed3ff

View File

@@ -143,7 +143,7 @@ namespace Jackett.Common.Indexers
{ {
foreach (var fi in feedItems) foreach (var fi in feedItems)
{ {
EraiRawsReleaseInfo releaseInfo = new EraiRawsReleaseInfo(fi); var releaseInfo = new EraiRawsReleaseInfo(fi);
// Validate the release // Validate the release
if (releaseInfo.PublishDate == null) if (releaseInfo.PublishDate == null)
@@ -152,9 +152,9 @@ namespace Jackett.Common.Indexers
continue; continue;
} }
if (releaseInfo.MagnetLink == null) if (releaseInfo.MagnetLink == null && string.IsNullOrWhiteSpace(releaseInfo.InfoHash))
{ {
logger.Warn($"Failed to parse {DisplayName} RSS feed item '{fi.Title}' due to malformed link URI."); logger.Warn($"Failed to parse {DisplayName} RSS feed item '{fi.Title}' due to malformed link URI and no infohash available.");
continue; continue;
} }
@@ -183,11 +183,25 @@ namespace Jackett.Common.Indexers
{ {
foreach (var fi in feedItems) foreach (var fi in feedItems)
{ {
var guid = fi.MagnetLink;
if (guid == null)
{
// Magnet link is not available so generate something unique
var builder = new UriBuilder(fi.DetailsLink);
if (!string.IsNullOrWhiteSpace(builder.Query))
{
builder.Query += "&";
}
builder.Query += $"infoHash={fi.InfoHash}";
guid = builder.Uri;
}
yield return new ReleaseInfo yield return new ReleaseInfo
{ {
Title = string.Concat(fi.Title, " - ", fi.Quality), Title = string.Concat(fi.Title, " - ", fi.Quality),
Guid = fi.MagnetLink, Guid = guid,
MagnetUri = fi.MagnetLink, MagnetUri = fi.MagnetLink,
InfoHash = fi.InfoHash,
Details = fi.DetailsLink, Details = fi.DetailsLink,
PublishDate = fi.PublishDate.Value.ToLocalTime().DateTime, PublishDate = fi.PublishDate.Value.ToLocalTime().DateTime,
Category = MapTrackerCatToNewznab("1"), Category = MapTrackerCatToNewznab("1"),
@@ -224,6 +238,7 @@ namespace Jackett.Common.Indexers
var title = rssItem.SelectSingleNode("title")?.InnerText; var title = rssItem.SelectSingleNode("title")?.InnerText;
var link = rssItem.SelectSingleNode("link")?.InnerText; var link = rssItem.SelectSingleNode("link")?.InnerText;
var publishDate = rssItem.SelectSingleNode("pubDate")?.InnerText; var publishDate = rssItem.SelectSingleNode("pubDate")?.InnerText;
var infoHash = rssItem.SelectSingleNode("erai:infohash", nsm)?.InnerText;
var size = rssItem.SelectSingleNode("erai:size", nsm)?.InnerText; var size = rssItem.SelectSingleNode("erai:size", nsm)?.InnerText;
var description = rssItem.SelectSingleNode("description")?.InnerText; var description = rssItem.SelectSingleNode("description")?.InnerText;
var quality = rssItem.SelectSingleNode("erai:resolution", nsm)?.InnerText; var quality = rssItem.SelectSingleNode("erai:resolution", nsm)?.InnerText;
@@ -232,6 +247,7 @@ namespace Jackett.Common.Indexers
{ {
Title = title, Title = title,
Link = link, Link = link,
InfoHash = infoHash,
PublishDate = publishDate, PublishDate = publishDate,
Size = size, Size = size,
Description = description, Description = description,
@@ -249,6 +265,8 @@ namespace Jackett.Common.Indexers
public string Link { get; private set; } public string Link { get; private set; }
public string InfoHash { get; private set; }
public string PublishDate { get; private set; } public string PublishDate { get; private set; }
public string Size { get; private set; } public string Size { get; private set; }
@@ -262,8 +280,10 @@ namespace Jackett.Common.Indexers
/// </summary> /// </summary>
private bool IsValid() private bool IsValid()
{ {
return !(string.IsNullOrWhiteSpace(Title) || var missingBothHashAndLink = string.IsNullOrWhiteSpace(Link) && string.IsNullOrWhiteSpace(InfoHash);
string.IsNullOrWhiteSpace(Link) ||
return !(missingBothHashAndLink ||
string.IsNullOrWhiteSpace(Title) ||
string.IsNullOrWhiteSpace(PublishDate) || string.IsNullOrWhiteSpace(PublishDate) ||
string.IsNullOrWhiteSpace(Size) || string.IsNullOrWhiteSpace(Size) ||
string.IsNullOrWhiteSpace(Quality)); string.IsNullOrWhiteSpace(Quality));
@@ -281,6 +301,7 @@ namespace Jackett.Common.Indexers
Quality = feedItem.Quality; Quality = feedItem.Quality;
Size = ReleaseInfo.GetBytes(feedItem.Size); Size = ReleaseInfo.GetBytes(feedItem.Size);
DetailsLink = ParseDetailsLink(feedItem.Description); DetailsLink = ParseDetailsLink(feedItem.Description);
InfoHash = feedItem.InfoHash;
if (Uri.TryCreate(feedItem.Link, UriKind.Absolute, out Uri magnetUri)) if (Uri.TryCreate(feedItem.Link, UriKind.Absolute, out Uri magnetUri))
{ {
@@ -321,6 +342,8 @@ namespace Jackett.Common.Indexers
public Uri MagnetLink { get; } public Uri MagnetLink { get; }
public string InfoHash { get; }
public Uri DetailsLink { get; set; } public Uri DetailsLink { get; set; }
public DateTimeOffset? PublishDate { get; } public DateTimeOffset? PublishDate { get; }
@@ -342,8 +365,6 @@ namespace Jackett.Common.Indexers
{ " - (?<detail>[0-9]+) ", " - " } // "<title> - <episode> ..." { " - (?<detail>[0-9]+) ", " - " } // "<title> - <episode> ..."
}; };
private const string TITLE_URL_SLUG_REGEX = @"^(?<url_slug>.+) -";
public string Parse(string title) public string Parse(string title)
{ {
var results = SearchTitleForDetails(title, new Dictionary<string, Dictionary<string, string>> { var results = SearchTitleForDetails(title, new Dictionary<string, Dictionary<string, string>> {