Fixed: Category not setting with qBitTorrent 3.3.14 and other api errors. (upstream from Sonarr)

pull/1875/head
James White 7 years ago committed by Leonardo Galli
parent b06108fb45
commit 17feedaf53

@ -1,4 +1,4 @@
using System; using System;
using System.Linq; using System.Linq;
using System.Collections.Generic; using System.Collections.Generic;
using NzbDrone.Common.Disk; using NzbDrone.Common.Disk;
@ -111,7 +111,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
{ {
case "error": // some error occurred, applies to paused torrents case "error": // some error occurred, applies to paused torrents
item.Status = DownloadItemStatus.Failed; item.Status = DownloadItemStatus.Failed;
item.Message = "QBittorrent is reporting an error"; item.Message = "qBittorrent is reporting an error";
break; break;
case "pausedDL": // torrent is paused and has NOT finished downloading case "pausedDL": // torrent is paused and has NOT finished downloading
@ -212,7 +212,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
var config = _proxy.GetConfig(Settings); var config = _proxy.GetConfig(Settings);
if (config.MaxRatioEnabled && config.RemoveOnMaxRatio) if (config.MaxRatioEnabled && config.RemoveOnMaxRatio)
{ {
return new NzbDroneValidationFailure(String.Empty, "QBittorrent is configured to remove torrents when they reach their Share Ratio Limit") return new NzbDroneValidationFailure(String.Empty, "qBittorrent is configured to remove torrents when they reach their Share Ratio Limit")
{ {
DetailedDescription = "Radarr will be unable to perform Completed Download Handling as configured. You can fix this in qBittorrent ('Tools -> Options...' in the menu) by changing 'Options -> BitTorrent -> Share Ratio Limiting' from 'Remove them' to 'Pause them'." DetailedDescription = "Radarr will be unable to perform Completed Download Handling as configured. You can fix this in qBittorrent ('Tools -> Options...' in the menu) by changing 'Options -> BitTorrent -> Share Ratio Limiting' from 'Remove them' to 'Pause them'."
}; };

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Net; using System.Net;
using NLog; using NLog;
@ -72,7 +72,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
.Post() .Post()
.AddFormParameter("urls", torrentUrl); .AddFormParameter("urls", torrentUrl);
ProcessRequest<object>(request, settings); var result = ProcessRequest(request, settings);
// Note: Older qbit versions returned nothing, so we can't do != "Ok." here.
if (result == "Fails.")
{
throw new DownloadClientException("Download client failed to add torrent by url");
}
} }
public void AddTorrentFromFile(string fileName, Byte[] fileContent, QBittorrentSettings settings) public void AddTorrentFromFile(string fileName, Byte[] fileContent, QBittorrentSettings settings)
@ -81,7 +87,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
.Post() .Post()
.AddFormUpload("torrents", fileName, fileContent); .AddFormUpload("torrents", fileName, fileContent);
ProcessRequest<object>(request, settings); var result = ProcessRequest(request, settings);
// Note: Current qbit versions return nothing, so we can't do != "Ok." here.
if (result == "Fails.")
{
throw new DownloadClientException("Download client failed to add torrent");
}
} }
public void RemoveTorrent(string hash, Boolean removeData, QBittorrentSettings settings) public void RemoveTorrent(string hash, Boolean removeData, QBittorrentSettings settings)
@ -90,7 +102,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
.Post() .Post()
.AddFormParameter("hashes", hash); .AddFormParameter("hashes", hash);
ProcessRequest<object>(request, settings); ProcessRequest(request, settings);
} }
public void SetTorrentLabel(string hash, string label, QBittorrentSettings settings) public void SetTorrentLabel(string hash, string label, QBittorrentSettings settings)
@ -101,7 +113,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
.AddFormParameter("category", label); .AddFormParameter("category", label);
try try
{ {
ProcessRequest<object>(setCategoryRequest, settings); ProcessRequest(setCategoryRequest, settings);
} }
catch(DownloadClientException ex) catch(DownloadClientException ex)
{ {
@ -112,7 +124,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
.Post() .Post()
.AddFormParameter("hashes", hash) .AddFormParameter("hashes", hash)
.AddFormParameter("label", label); .AddFormParameter("label", label);
ProcessRequest<object>(setLabelRequest, settings);
ProcessRequest(setLabelRequest, settings);
} }
} }
} }
@ -125,7 +138,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
try try
{ {
var response = ProcessRequest<object>(request, settings); ProcessRequest(request, settings);
} }
catch (DownloadClientException ex) catch (DownloadClientException ex)
{ {
@ -152,10 +165,18 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
private TResult ProcessRequest<TResult>(HttpRequestBuilder requestBuilder, QBittorrentSettings settings) private TResult ProcessRequest<TResult>(HttpRequestBuilder requestBuilder, QBittorrentSettings settings)
where TResult : new() where TResult : new()
{
var responseContent = ProcessRequest(requestBuilder, settings);
return Json.Deserialize<TResult>(responseContent);
}
private string ProcessRequest(HttpRequestBuilder requestBuilder, QBittorrentSettings settings)
{ {
AuthenticateClient(requestBuilder, settings); AuthenticateClient(requestBuilder, settings);
var request = requestBuilder.Build(); var request = requestBuilder.Build();
request.LogResponseContent = true;
HttpResponse response; HttpResponse response;
try try
@ -176,15 +197,15 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
} }
else else
{ {
throw new DownloadClientException("Failed to connect to qBitTorrent, check your settings.", ex); throw new DownloadClientException("Failed to connect to qBittorrent, check your settings.", ex);
} }
} }
catch (WebException ex) catch (WebException ex)
{ {
throw new DownloadClientException("Failed to connect to qBitTorrent, please check your settings.", ex); throw new DownloadClientException("Failed to connect to qBittorrent, please check your settings.", ex);
} }
return Json.Deserialize<TResult>(response.Content); return response.Content;
} }
private void AuthenticateClient(HttpRequestBuilder requestBuilder, QBittorrentSettings settings, bool reauthenticate = false) private void AuthenticateClient(HttpRequestBuilder requestBuilder, QBittorrentSettings settings, bool reauthenticate = false)
@ -218,23 +239,23 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
_logger.Debug("qbitTorrent authentication failed."); _logger.Debug("qbitTorrent authentication failed.");
if (ex.Response.StatusCode == HttpStatusCode.Forbidden) if (ex.Response.StatusCode == HttpStatusCode.Forbidden)
{ {
throw new DownloadClientAuthenticationException("Failed to authenticate with qbitTorrent.", ex); throw new DownloadClientAuthenticationException("Failed to authenticate with qBittorrent.", ex);
} }
throw new DownloadClientException("Failed to connect to qBitTorrent, please check your settings.", ex); throw new DownloadClientException("Failed to connect to qBittorrent, please check your settings.", ex);
} }
catch (WebException ex) catch (WebException ex)
{ {
throw new DownloadClientException("Failed to connect to qBitTorrent, please check your settings.", ex); throw new DownloadClientException("Failed to connect to qBittorrent, please check your settings.", ex);
} }
if (response.Content != "Ok.") // returns "Fails." on bad login if (response.Content != "Ok.") // returns "Fails." on bad login
{ {
_logger.Debug("qbitTorrent authentication failed."); _logger.Debug("qbitTorrent authentication failed.");
throw new DownloadClientAuthenticationException("Failed to authenticate with qbitTorrent."); throw new DownloadClientAuthenticationException("Failed to authenticate with qBittorrent.");
} }
_logger.Debug("qbitTorrent authentication succeeded."); _logger.Debug("qBittorrent authentication succeeded.");
cookies = response.GetCookies(); cookies = response.GetCookies();

Loading…
Cancel
Save