diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs index c352b92a3..32b9e28dd 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrent.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Linq; using System.Collections.Generic; using NzbDrone.Common.Disk; @@ -111,7 +111,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent { case "error": // some error occurred, applies to paused torrents item.Status = DownloadItemStatus.Failed; - item.Message = "QBittorrent is reporting an error"; + item.Message = "qBittorrent is reporting an error"; break; 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); 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'." }; diff --git a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxy.cs b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxy.cs index be4ca16c5..d9499c38c 100644 --- a/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxy.cs +++ b/src/NzbDrone.Core/Download/Clients/QBittorrent/QBittorrentProxy.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Net; using NLog; @@ -72,7 +72,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent .Post() .AddFormParameter("urls", torrentUrl); - ProcessRequest(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) @@ -81,7 +87,13 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent .Post() .AddFormUpload("torrents", fileName, fileContent); - ProcessRequest(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) @@ -90,7 +102,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent .Post() .AddFormParameter("hashes", hash); - ProcessRequest(request, settings); + ProcessRequest(request, settings); } public void SetTorrentLabel(string hash, string label, QBittorrentSettings settings) @@ -101,7 +113,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent .AddFormParameter("category", label); try { - ProcessRequest(setCategoryRequest, settings); + ProcessRequest(setCategoryRequest, settings); } catch(DownloadClientException ex) { @@ -112,7 +124,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent .Post() .AddFormParameter("hashes", hash) .AddFormParameter("label", label); - ProcessRequest(setLabelRequest, settings); + + ProcessRequest(setLabelRequest, settings); } } } @@ -125,7 +138,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent try { - var response = ProcessRequest(request, settings); + ProcessRequest(request, settings); } catch (DownloadClientException ex) { @@ -152,10 +165,18 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent private TResult ProcessRequest(HttpRequestBuilder requestBuilder, QBittorrentSettings settings) where TResult : new() + { + var responseContent = ProcessRequest(requestBuilder, settings); + + return Json.Deserialize(responseContent); + } + + private string ProcessRequest(HttpRequestBuilder requestBuilder, QBittorrentSettings settings) { AuthenticateClient(requestBuilder, settings); var request = requestBuilder.Build(); + request.LogResponseContent = true; HttpResponse response; try @@ -176,15 +197,15 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent } 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) { - 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(response.Content); + return response.Content; } 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."); 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) { - 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 { _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();