mirror of
https://github.com/Radarr/Radarr
synced 2024-12-21 23:42:23 +00:00
Deluge communication improvements
(cherry picked from commit 183b8b574a4dd948b5fada94d0e645b87710f223)
This commit is contained in:
parent
b845268b3d
commit
ba4ccbb0bd
2 changed files with 39 additions and 44 deletions
|
@ -20,6 +20,7 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
|||
public class Deluge : TorrentClientBase<DelugeSettings>
|
||||
{
|
||||
private readonly IDelugeProxy _proxy;
|
||||
private bool _hasAttemptedReconnecting;
|
||||
|
||||
public Deluge(IDelugeProxy proxy,
|
||||
ITorrentFileInfoReader torrentFileInfoReader,
|
||||
|
@ -128,14 +129,9 @@ public override IEnumerable<DownloadClientItem> GetItems()
|
|||
|
||||
foreach (var torrent in torrents)
|
||||
{
|
||||
// Silently ignore torrents with no hash
|
||||
if (torrent.Hash.IsNullOrWhiteSpace())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Ignore torrents without a name, but track to log a single warning for all invalid torrents.
|
||||
if (torrent.Name.IsNullOrWhiteSpace())
|
||||
// Ignore torrents without a hash or name, but track to log a single warning
|
||||
// for all invalid torrents as well as reconnect to the Daemon.
|
||||
if (torrent.Hash.IsNullOrWhiteSpace() || torrent.Name.IsNullOrWhiteSpace())
|
||||
{
|
||||
ignoredCount++;
|
||||
continue;
|
||||
|
@ -199,9 +195,20 @@ public override IEnumerable<DownloadClientItem> GetItems()
|
|||
items.Add(item);
|
||||
}
|
||||
|
||||
if (ignoredCount > 0)
|
||||
if (ignoredCount > 0 && _hasAttemptedReconnecting)
|
||||
{
|
||||
_logger.Warn("{0} torrent(s) were ignored because they did not have a title. Check Deluge and remove any invalid torrents");
|
||||
if (_hasAttemptedReconnecting)
|
||||
{
|
||||
_logger.Warn("{0} torrent(s) were ignored because they did not have a hash or title. Deluge may have disconnected from it's daemon. If you continue to see this error, check Deluge for invalid torrents.", ignoredCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
_proxy.ReconnectToDaemon(Settings);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_hasAttemptedReconnecting = false;
|
||||
}
|
||||
|
||||
return items;
|
||||
|
@ -322,9 +329,9 @@ private ValidationFailure TestCategory()
|
|||
return null;
|
||||
}
|
||||
|
||||
var enabledPlugins = _proxy.GetEnabledPlugins(Settings);
|
||||
var methods = _proxy.GetMethods(Settings);
|
||||
|
||||
if (!enabledPlugins.Contains("Label"))
|
||||
if (!methods.Any(m => m.StartsWith("label.")))
|
||||
{
|
||||
return new NzbDroneValidationFailure("MovieCategory", _localizationService.GetLocalizedString("DownloadClientDelugeValidationLabelPluginInactive"))
|
||||
{
|
||||
|
|
|
@ -18,8 +18,7 @@ public interface IDelugeProxy
|
|||
Dictionary<string, object> GetConfig(DelugeSettings settings);
|
||||
DelugeTorrent[] GetTorrents(DelugeSettings settings);
|
||||
DelugeTorrent[] GetTorrentsByLabel(string label, DelugeSettings settings);
|
||||
string[] GetAvailablePlugins(DelugeSettings settings);
|
||||
string[] GetEnabledPlugins(DelugeSettings settings);
|
||||
string[] GetMethods(DelugeSettings settings);
|
||||
string[] GetAvailableLabels(DelugeSettings settings);
|
||||
DelugeLabel GetLabelOptions(DelugeSettings settings);
|
||||
void SetTorrentLabel(string hash, string label, DelugeSettings settings);
|
||||
|
@ -30,6 +29,7 @@ public interface IDelugeProxy
|
|||
string AddTorrentFromFile(string filename, byte[] fileContent, DelugeSettings settings);
|
||||
bool RemoveTorrent(string hash, bool removeData, DelugeSettings settings);
|
||||
void MoveTorrentToTopInQueue(string hash, DelugeSettings settings);
|
||||
void ReconnectToDaemon(DelugeSettings settings);
|
||||
}
|
||||
|
||||
public class DelugeProxy : IDelugeProxy
|
||||
|
@ -51,25 +51,14 @@ public DelugeProxy(ICacheManager cacheManager, IHttpClient httpClient, Logger lo
|
|||
|
||||
public string GetVersion(DelugeSettings settings)
|
||||
{
|
||||
try
|
||||
var methods = GetMethods(settings);
|
||||
|
||||
if (methods.Contains("daemon.get_version"))
|
||||
{
|
||||
var response = ProcessRequest<string>(settings, "daemon.info");
|
||||
|
||||
return response;
|
||||
return ProcessRequest<string>(settings, "daemon.get_version");
|
||||
}
|
||||
catch (DownloadClientException ex)
|
||||
{
|
||||
if (ex.Message.Contains("Unknown method"))
|
||||
{
|
||||
// Deluge v2 beta replaced 'daemon.info' with 'daemon.get_version'.
|
||||
// It may return or become official, for now we just retry with the get_version api.
|
||||
var response = ProcessRequest<string>(settings, "daemon.get_version");
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
throw;
|
||||
}
|
||||
return ProcessRequest<string>(settings, "daemon.info");
|
||||
}
|
||||
|
||||
public Dictionary<string, object> GetConfig(DelugeSettings settings)
|
||||
|
@ -101,6 +90,13 @@ public DelugeTorrent[] GetTorrentsByLabel(string label, DelugeSettings settings)
|
|||
return GetTorrents(response);
|
||||
}
|
||||
|
||||
public string[] GetMethods(DelugeSettings settings)
|
||||
{
|
||||
var response = ProcessRequest<string[]>(settings, "system.listMethods");
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public string AddTorrentFromMagnet(string magnetLink, DelugeSettings settings)
|
||||
{
|
||||
dynamic options = new ExpandoObject();
|
||||
|
@ -159,20 +155,6 @@ public void MoveTorrentToTopInQueue(string hash, DelugeSettings settings)
|
|||
ProcessRequest<object>(settings, "core.queue_top", (object)new string[] { hash });
|
||||
}
|
||||
|
||||
public string[] GetAvailablePlugins(DelugeSettings settings)
|
||||
{
|
||||
var response = ProcessRequest<string[]>(settings, "core.get_available_plugins");
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public string[] GetEnabledPlugins(DelugeSettings settings)
|
||||
{
|
||||
var response = ProcessRequest<string[]>(settings, "core.get_enabled_plugins");
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
public string[] GetAvailableLabels(DelugeSettings settings)
|
||||
{
|
||||
var response = ProcessRequest<string[]>(settings, "label.get_labels");
|
||||
|
@ -223,6 +205,12 @@ public void SetTorrentLabel(string hash, string label, DelugeSettings settings)
|
|||
ProcessRequest<object>(settings, "label.set_torrent", hash, label);
|
||||
}
|
||||
|
||||
public void ReconnectToDaemon(DelugeSettings settings)
|
||||
{
|
||||
ProcessRequest<string>(settings, "web.disconnect");
|
||||
ConnectDaemon(BuildRequest(settings));
|
||||
}
|
||||
|
||||
private JsonRpcRequestBuilder BuildRequest(DelugeSettings settings)
|
||||
{
|
||||
var url = HttpRequestBuilder.BuildBaseUrl(settings.UseSsl, settings.Host, settings.Port, settings.UrlBase);
|
||||
|
|
Loading…
Reference in a new issue