diff --git a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs index 4ad03e97a..5fe15d65c 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/Newznab/NewznabRssParser.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Xml; using System.Xml.Linq; using NzbDrone.Common.Extensions; using NzbDrone.Core.Indexers.Exceptions; @@ -80,6 +81,20 @@ namespace NzbDrone.Core.Indexers.Newznab protected override ReleaseInfo ProcessItem(XElement item, ReleaseInfo releaseInfo) { + if (!item.Elements("enclosure").Any(e => + { + var type = e.Attribute("type"); + if (type == null) + { + return true; + } + + return type.Value == "application/x-nzb"; + })) + { + return null; + } + releaseInfo = base.ProcessItem(item, releaseInfo); releaseInfo.ImdbId = GetImdbId(item); releaseInfo.Grabs = GetGrabs(item); @@ -151,7 +166,29 @@ namespace NzbDrone.Core.Indexers.Newznab if (!Uri.IsWellFormedUriString(url, UriKind.Absolute)) { - url = ParseUrl((string)item.Element("enclosure").Attribute("url")); + var enclosure = item.Elements("enclosure"); + var filtered = enclosure.Where(e => + { + var type = e.Attribute("type"); + if (type == null) + { + return true; + } + + return type.Value == "application/x-nzb"; + }); + + var xElements = filtered as XElement[] ?? filtered.ToArray(); + if (!xElements.Any()) + { + return url; + } + + var attr = xElements.First().Attribute("url"); + if (attr != null) + { + url = attr.Value; + } } return url; diff --git a/src/NzbDrone.Core/Indexers/RssParser.cs b/src/NzbDrone.Core/Indexers/RssParser.cs index daa13b1e9..e9ca3d146 100644 --- a/src/NzbDrone.Core/Indexers/RssParser.cs +++ b/src/NzbDrone.Core/Indexers/RssParser.cs @@ -82,12 +82,7 @@ namespace NzbDrone.Core.Indexers } } - if (!PostProcess(indexerResponse, items, releases)) - { - return new List(); - } - - return releases; + return !PostProcess(indexerResponse, items, releases) ? new List() : releases; } public Action, DateTime?> CookiesUpdater { get; set; } @@ -147,6 +142,11 @@ namespace NzbDrone.Core.Indexers releaseInfo = ProcessItem(item, releaseInfo); + if (releaseInfo == null) + { + return null; + } + _logger.Trace("Parsed: {0}", releaseInfo.Title); return PostProcessItem(item, releaseInfo);