1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-12-12 11:15:43 +02:00

New: Optional directory setting for Aria2

Closes #6343
This commit is contained in:
Mark McDowall 2024-01-12 23:51:35 -08:00 committed by Mark McDowall
parent 53cf530893
commit fd17df0dd0
4 changed files with 25 additions and 2 deletions

View File

@ -92,6 +92,10 @@ private static XElement ConvertParameter(object value)
{ {
data = new XElement("base64", Convert.ToBase64String(bytes)); data = new XElement("base64", Convert.ToBase64String(bytes));
} }
else if (value is Dictionary<string, string> d)
{
data = new XElement("struct", d.Select(p => new XElement("member", new XElement("name", p.Key), new XElement("value", p.Value))));
}
else else
{ {
throw new InvalidOperationException($"Unhandled argument type {value.GetType().Name}"); throw new InvalidOperationException($"Unhandled argument type {value.GetType().Name}");

View File

@ -2,6 +2,7 @@
using System.Linq; using System.Linq;
using System.Xml.Linq; using System.Xml.Linq;
using System.Xml.XPath; using System.Xml.XPath;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Http; using NzbDrone.Common.Http;
using NzbDrone.Core.Download.Extensions; using NzbDrone.Core.Download.Extensions;
@ -97,8 +98,14 @@ public Dictionary<string, string> GetGlobals(Aria2Settings settings)
public string AddMagnet(Aria2Settings settings, string magnet) public string AddMagnet(Aria2Settings settings, string magnet)
{ {
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet }); var options = new Dictionary<string, string>();
if (settings.Directory.IsNotNullOrWhiteSpace())
{
options.Add("dir", settings.Directory);
}
var response = ExecuteRequest(settings, "aria2.addUri", GetToken(settings), new List<string> { magnet }, options);
var gid = response.GetStringResponse(); var gid = response.GetStringResponse();
return gid; return gid;
@ -106,8 +113,16 @@ public string AddMagnet(Aria2Settings settings, string magnet)
public string AddTorrent(Aria2Settings settings, byte[] torrent) public string AddTorrent(Aria2Settings settings, byte[] torrent)
{ {
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent); // Aria2's second parameter is an array of URIs and needs to be sent if options are provided, this satisfies that requirement.
var emptyListOfUris = new List<string>();
var options = new Dictionary<string, string>();
if (settings.Directory.IsNotNullOrWhiteSpace())
{
options.Add("dir", settings.Directory);
}
var response = ExecuteRequest(settings, "aria2.addTorrent", GetToken(settings), torrent, emptyListOfUris, options);
var gid = response.GetStringResponse(); var gid = response.GetStringResponse();
return gid; return gid;

View File

@ -41,6 +41,9 @@ public Aria2Settings()
[FieldDefinition(4, Label = "SecretToken", Type = FieldType.Password, Privacy = PrivacyLevel.Password)] [FieldDefinition(4, Label = "SecretToken", Type = FieldType.Password, Privacy = PrivacyLevel.Password)]
public string SecretToken { get; set; } public string SecretToken { get; set; }
[FieldDefinition(5, Label = "Directory", Type = FieldType.Textbox, HelpText = "DownloadClientAriaSettingsDirectoryHelpText")]
public string Directory { get; set; }
public NzbDroneValidationResult Validate() public NzbDroneValidationResult Validate()
{ {
return new NzbDroneValidationResult(Validator.Validate(this)); return new NzbDroneValidationResult(Validator.Validate(this));

View File

@ -368,6 +368,7 @@
"DotNetVersion": ".NET", "DotNetVersion": ".NET",
"Download": "Download", "Download": "Download",
"DownloadClient": "Download Client", "DownloadClient": "Download Client",
"DownloadClientAriaSettingsDirectoryHelpText": "Optional location to put downloads in, leave blank to use the default Aria2 location",
"DownloadClientCheckNoneAvailableHealthCheckMessage": "No download client is available", "DownloadClientCheckNoneAvailableHealthCheckMessage": "No download client is available",
"DownloadClientCheckUnableToCommunicateWithHealthCheckMessage": "Unable to communicate with {downloadClientName}. {errorMessage}", "DownloadClientCheckUnableToCommunicateWithHealthCheckMessage": "Unable to communicate with {downloadClientName}. {errorMessage}",
"DownloadClientDelugeSettingsUrlBaseHelpText": "Adds a prefix to the deluge json url, see {url}", "DownloadClientDelugeSettingsUrlBaseHelpText": "Adds a prefix to the deluge json url, see {url}",