Merge pull request #824 from larsjohnsen/rtorrent-misc
rTorrent fixes Fixed: Adding label to torrents in rTorrent
This commit is contained in:
commit
0841bf1d2a
|
@ -40,23 +40,9 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromUrl(magnetLink, Settings);
|
_proxy.AddTorrentFromUrl(magnetLink, Settings);
|
||||||
|
|
||||||
// Wait until url has been resolved before returning
|
var tries = 10;
|
||||||
var TRIES = 5;
|
var retryDelay = 500;
|
||||||
var RETRY_DELAY = 500; //ms
|
if (WaitForTorrent(hash, tries, retryDelay))
|
||||||
var ready = false;
|
|
||||||
|
|
||||||
for (var i = 0; i < TRIES; i++)
|
|
||||||
{
|
|
||||||
ready = _proxy.HasHashTorrent(hash, Settings);
|
|
||||||
if (ready)
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
Thread.Sleep(RETRY_DELAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ready)
|
|
||||||
{
|
{
|
||||||
_proxy.SetTorrentLabel(hash, Settings.TvCategory, Settings);
|
_proxy.SetTorrentLabel(hash, Settings.TvCategory, Settings);
|
||||||
|
|
||||||
|
@ -69,8 +55,8 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_logger.Debug("Magnet {0} could not be resolved in {1} tries at {2} ms intervals.", magnetLink, TRIES, RETRY_DELAY);
|
_logger.Debug("rTorrent could not resolve magnet {0}. Removing", magnetLink);
|
||||||
// Remove from client, since it is discarded
|
|
||||||
RemoveItem(hash, true);
|
RemoveItem(hash, true);
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -80,14 +66,28 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
protected override string AddFromTorrentFile(RemoteEpisode remoteEpisode, string hash, string filename, byte[] fileContent)
|
protected override string AddFromTorrentFile(RemoteEpisode remoteEpisode, string hash, string filename, byte[] fileContent)
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromFile(filename, fileContent, Settings);
|
_proxy.AddTorrentFromFile(filename, fileContent, Settings);
|
||||||
_proxy.SetTorrentLabel(hash, Settings.TvCategory, Settings);
|
|
||||||
|
|
||||||
SetPriority(remoteEpisode, hash);
|
var tries = 2;
|
||||||
SetDownloadDirectory(hash);
|
var retryDelay = 100;
|
||||||
|
if (WaitForTorrent(hash, tries, retryDelay))
|
||||||
|
{
|
||||||
|
_proxy.SetTorrentLabel(hash, Settings.TvCategory, Settings);
|
||||||
|
|
||||||
_proxy.StartTorrent(hash, Settings);
|
SetPriority(remoteEpisode, hash);
|
||||||
|
SetDownloadDirectory(hash);
|
||||||
|
|
||||||
return hash;
|
_proxy.StartTorrent(hash, Settings);
|
||||||
|
|
||||||
|
return hash;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.Debug("rTorrent could not add file");
|
||||||
|
|
||||||
|
RemoveItem(hash, true);
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Name
|
public override string Name
|
||||||
|
@ -145,7 +145,7 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
else if (torrent.IsActive) item.Status = DownloadItemStatus.Downloading;
|
else if (torrent.IsActive) item.Status = DownloadItemStatus.Downloading;
|
||||||
else if (!torrent.IsActive) item.Status = DownloadItemStatus.Paused;
|
else if (!torrent.IsActive) item.Status = DownloadItemStatus.Paused;
|
||||||
|
|
||||||
// Since we do not know the user's intent, do not let Sonarr to remove the torrent
|
// No stop ratio data is present, so do not delete
|
||||||
item.IsReadOnly = true;
|
item.IsReadOnly = true;
|
||||||
|
|
||||||
items.Add(item);
|
items.Add(item);
|
||||||
|
@ -251,5 +251,22 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
_proxy.SetTorrentDownloadDirectory(hash, Settings.TvDirectory, Settings);
|
_proxy.SetTorrentDownloadDirectory(hash, Settings.TvDirectory, Settings);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private bool WaitForTorrent(string hash, int tries, int retryDelay)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < tries; i++)
|
||||||
|
{
|
||||||
|
if (_proxy.HasHashTorrent(hash, Settings))
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Thread.Sleep(retryDelay);
|
||||||
|
}
|
||||||
|
|
||||||
|
_logger.Debug("Could not find hash {0} in {1} tries at {2} ms intervals.", hash, tries, retryDelay);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,11 +97,13 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
var items = new List<RTorrentTorrent>();
|
var items = new List<RTorrentTorrent>();
|
||||||
foreach (object[] torrent in ret)
|
foreach (object[] torrent in ret)
|
||||||
{
|
{
|
||||||
|
var labelDecoded = System.Web.HttpUtility.UrlDecode((string) torrent[3]);
|
||||||
|
|
||||||
var item = new RTorrentTorrent();
|
var item = new RTorrentTorrent();
|
||||||
item.Name = (string) torrent[0];
|
item.Name = (string) torrent[0];
|
||||||
item.Hash = (string) torrent[1];
|
item.Hash = (string) torrent[1];
|
||||||
item.Path = (string) torrent[2];
|
item.Path = (string) torrent[2];
|
||||||
item.Category = (string) torrent[3];
|
item.Category = labelDecoded;
|
||||||
item.TotalSize = (long) torrent[4];
|
item.TotalSize = (long) torrent[4];
|
||||||
item.RemainingSize = (long) torrent[5];
|
item.RemainingSize = (long) torrent[5];
|
||||||
item.DownRate = (long) torrent[6];
|
item.DownRate = (long) torrent[6];
|
||||||
|
@ -172,10 +174,12 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
{
|
{
|
||||||
_logger.Debug("Executing remote method: d.set_custom1");
|
_logger.Debug("Executing remote method: d.set_custom1");
|
||||||
|
|
||||||
|
var labelEncoded = System.Web.HttpUtility.UrlEncode(label);
|
||||||
|
|
||||||
var client = BuildClient(settings);
|
var client = BuildClient(settings);
|
||||||
|
|
||||||
var setLabel = client.SetLabel(hash, label);
|
var setLabel = client.SetLabel(hash, labelEncoded);
|
||||||
if (setLabel != label)
|
if (setLabel != labelEncoded)
|
||||||
{
|
{
|
||||||
throw new DownloadClientException("Could set label on torrent: {0}.", hash);
|
throw new DownloadClientException("Could set label on torrent: {0}.", hash);
|
||||||
}
|
}
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
[FieldDefinition(1, Label = "Port", Type = FieldType.Textbox)]
|
[FieldDefinition(1, Label = "Port", Type = FieldType.Textbox)]
|
||||||
public int Port { get; set; }
|
public int Port { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(2, Label = "Url Base", Type = FieldType.Textbox, Advanced = true, HelpText = "Adds a suffix the rpc url, see http://[host]:[port]/[urlBase], by default this should be RPC2")]
|
[FieldDefinition(2, Label = "Url Path", Type = FieldType.Textbox, HelpText = "Path to the XMLRPC endpoint, see http(s)://[host]:[port]/[urlPath]. When using ruTorrent this usually is RPC2 or (path to ruTorrent)/plugins/rpc/rpc.php")]
|
||||||
public string UrlBase { get; set; }
|
public string UrlBase { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(3, Label = "Use SSL", Type = FieldType.Checkbox)]
|
[FieldDefinition(3, Label = "Use SSL", Type = FieldType.Checkbox)]
|
||||||
|
|
Loading…
Reference in New Issue