mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-14 11:23:42 +02:00
Improved error message when nzb download contains an newznab error instead
This commit is contained in:
parent
d369d85699
commit
776191b3bd
@ -11,5 +11,21 @@ public static IEnumerable<XElement> FindDecendants(this XContainer container, st
|
||||
{
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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 @@ public void should_throw_when_no_files()
|
||||
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()
|
||||
{
|
||||
|
2
src/NzbDrone.Core.Test/Files/Nzbs/NewznabError.nzb
Normal file
2
src/NzbDrone.Core.Test/Files/Nzbs/NewznabError.nzb
Normal file
@ -0,0 +1,2 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<error code="201" description="Incorrect parameter" />
|
@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Xml;
|
||||
@ -27,6 +28,14 @@ public void Validate(string filename, byte[] fileContent)
|
||||
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);
|
||||
|
@ -52,7 +52,7 @@ public override string Download(RemoteEpisode remoteEpisode)
|
||||
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)
|
||||
|
Loading…
Reference in New Issue
Block a user