Improved error message when nzb download contains an newznab error instead

This commit is contained in:
Taloth Saldono 2020-04-16 22:16:50 +02:00
parent d369d85699
commit 776191b3bd
5 changed files with 40 additions and 1 deletions

View File

@ -11,5 +11,21 @@ namespace NzbDrone.Common.Extensions
{
return container.Descendants().Where(c => c.Name.LocalName.Equals(localName, StringComparison.InvariantCultureIgnoreCase));
}
public static bool TryGetAttributeValue(this XElement element, string name, out string value)
{
var attr = element.Attribute(name);
if (attr != null)
{
value = attr.Value;
return true;
}
else
{
value = null;
return false;
}
}
}
}

View File

@ -1,4 +1,5 @@
using System.IO;
using FluentAssertions;
using NUnit.Framework;
using NzbDrone.Core.Download;
using NzbDrone.Core.Test.Framework;
@ -31,6 +32,17 @@ namespace NzbDrone.Core.Test.Download
Assert.Throws<InvalidNzbException>(() => Subject.Validate(filename, fileContent));
}
[Test]
public void should_throw_on_newznab_error()
{
var filename = "NewznabError";
var fileContent = GivenNzbFile(filename);
var ex = Assert.Throws<InvalidNzbException>(() => Subject.Validate(filename, fileContent));
ex.Message.Should().Contain("201 - Incorrect parameter");
}
[Test]
public void should_validate_nzb()
{

View File

@ -0,0 +1,2 @@
<?xml version="1.0" encoding="UTF-8"?>
<error code="201" description="Incorrect parameter" />

View File

@ -1,3 +1,4 @@
using System;
using System.IO;
using System.Linq;
using System.Xml;
@ -27,6 +28,14 @@ namespace NzbDrone.Core.Download
throw new InvalidNzbException("Invalid NZB: No Root element [{0}]", filename);
}
// nZEDb has an bug in their error reporting code spitting out invalid http status codes
if (nzb.Name.LocalName.Equals("error") &&
nzb.TryGetAttributeValue("code", out var code) &&
nzb.TryGetAttributeValue("description", out var description))
{
throw new InvalidNzbException("Invalid NZB: Contains indexer error: {0} - {1}", code, description);
}
if (!nzb.Name.LocalName.Equals("nzb"))
{
throw new InvalidNzbException("Invalid NZB: Unexpected root element. Expected 'nzb' found '{0}' [{1}]", nzb.Name.LocalName, filename);

View File

@ -52,7 +52,7 @@ namespace NzbDrone.Core.Download
if (ex.Response.StatusCode == HttpStatusCode.NotFound)
{
_logger.Error(ex, "Downloading nzb file for episode '{0}' failed since it no longer exists ({1})", remoteEpisode.Release.Title, url);
throw new ReleaseUnavailableException(remoteEpisode.Release, "Downloading torrent failed", ex);
throw new ReleaseUnavailableException(remoteEpisode.Release, "Downloading nzb failed", ex);
}
if ((int)ex.Response.StatusCode == 429)