mirror of
https://github.com/lidarr/lidarr.git
synced 2025-08-23 14:55:20 -07:00
parent
17c100a7e7
commit
38932d82db
24 changed files with 242 additions and 53 deletions
|
@ -33,7 +33,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbVortexTests
|
||||||
Port = 2222,
|
Port = 2222,
|
||||||
ApiKey = "1234-ABCD",
|
ApiKey = "1234-ABCD",
|
||||||
TvCategory = "tv",
|
TvCategory = "tv",
|
||||||
RecentTvPriority = (int)NzbgetPriority.High
|
RecentMoviePriority = (int)NzbgetPriority.High
|
||||||
};
|
};
|
||||||
|
|
||||||
_queued = new NzbVortexQueueItem
|
_queued = new NzbVortexQueueItem
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.NzbgetTests
|
||||||
Username = "admin",
|
Username = "admin",
|
||||||
Password = "pass",
|
Password = "pass",
|
||||||
MovieCategory = "movie",
|
MovieCategory = "movie",
|
||||||
RecentTvPriority = (int)NzbgetPriority.High
|
RecentMoviePriority = (int)NzbgetPriority.High
|
||||||
};
|
};
|
||||||
|
|
||||||
_queued = new NzbgetQueueItem
|
_queued = new NzbgetQueueItem
|
||||||
|
|
|
@ -89,6 +89,12 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void GivenHighPriority()
|
||||||
|
{
|
||||||
|
Subject.Definition.Settings.As<QBittorrentSettings>().OlderMoviePriority = (int) QBittorrentPriority.First;
|
||||||
|
Subject.Definition.Settings.As<QBittorrentSettings>().RecentMoviePriority = (int) QBittorrentPriority.First;
|
||||||
|
}
|
||||||
|
|
||||||
protected void GivenMaxRatio(float maxRatio, bool removeOnMaxRatio = true)
|
protected void GivenMaxRatio(float maxRatio, bool removeOnMaxRatio = true)
|
||||||
{
|
{
|
||||||
Mocker.GetMock<IQBittorrentProxy>()
|
Mocker.GetMock<IQBittorrentProxy>()
|
||||||
|
@ -265,6 +271,39 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.QBittorrentTests
|
||||||
id.Should().Be(expectedHash);
|
id.Should().Be(expectedHash);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Download_should_set_top_priority()
|
||||||
|
{
|
||||||
|
GivenHighPriority();
|
||||||
|
GivenSuccessfulDownload();
|
||||||
|
|
||||||
|
var remoteMovie = CreateRemoteMovie();
|
||||||
|
|
||||||
|
var id = Subject.Download(remoteMovie);
|
||||||
|
|
||||||
|
Mocker.GetMock<IQBittorrentProxy>()
|
||||||
|
.Verify(v => v.MoveTorrentToTopInQueue(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()), Times.Once());
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void Download_should_not_fail_if_top_priority_not_available()
|
||||||
|
{
|
||||||
|
GivenHighPriority();
|
||||||
|
GivenSuccessfulDownload();
|
||||||
|
|
||||||
|
Mocker.GetMock<IQBittorrentProxy>()
|
||||||
|
.Setup(v => v.MoveTorrentToTopInQueue(It.IsAny<string>(), It.IsAny<QBittorrentSettings>()))
|
||||||
|
.Throws(new HttpException(new HttpResponse(new HttpRequest("http://me.local/"), new HttpHeader(), new byte[0], System.Net.HttpStatusCode.Forbidden)));
|
||||||
|
|
||||||
|
var remoteMovie = CreateRemoteMovie();
|
||||||
|
|
||||||
|
var id = Subject.Download(remoteMovie);
|
||||||
|
|
||||||
|
id.Should().NotBeNullOrEmpty();
|
||||||
|
|
||||||
|
ExceptionVerification.ExpectedWarns(1);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void should_return_status_with_outputdirs()
|
public void should_return_status_with_outputdirs()
|
||||||
{
|
{
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.SabnzbdTests
|
||||||
Username = "admin",
|
Username = "admin",
|
||||||
Password = "pass",
|
Password = "pass",
|
||||||
MovieCategory = "movie",
|
MovieCategory = "movie",
|
||||||
RecentTvPriority = (int)SabnzbdPriority.High
|
RecentMoviePriority = (int)SabnzbdPriority.High
|
||||||
};
|
};
|
||||||
_queued = new SabnzbdQueue
|
_queued = new SabnzbdQueue
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,6 +42,14 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||||
|
|
||||||
_proxy.SetTorrentConfiguration(actualHash, "remove_at_ratio", false, Settings);
|
_proxy.SetTorrentConfiguration(actualHash, "remove_at_ratio", false, Settings);
|
||||||
|
|
||||||
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)DelugePriority.First ||
|
||||||
|
!isRecentMovie && Settings.OlderMoviePriority == (int)DelugePriority.First)
|
||||||
|
{
|
||||||
|
_proxy.MoveTorrentToTopInQueue(actualHash, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
return actualHash.ToUpper();
|
return actualHash.ToUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +64,14 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||||
|
|
||||||
_proxy.SetTorrentConfiguration(actualHash, "remove_at_ratio", false, Settings);
|
_proxy.SetTorrentConfiguration(actualHash, "remove_at_ratio", false, Settings);
|
||||||
|
|
||||||
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)DelugePriority.First ||
|
||||||
|
!isRecentMovie && Settings.OlderMoviePriority == (int)DelugePriority.First)
|
||||||
|
{
|
||||||
|
_proxy.MoveTorrentToTopInQueue(actualHash, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
return actualHash.ToUpper();
|
return actualHash.ToUpper();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
@ -43,7 +43,13 @@ namespace NzbDrone.Core.Download.Clients.Deluge
|
||||||
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||||
public string MovieCategory { get; set; }
|
public string MovieCategory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(5, Label = "Use SSL", Type = FieldType.Checkbox)]
|
[FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(DelugePriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(DelugePriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(7, Label = "Use SSL", Type = FieldType.Checkbox)]
|
||||||
public bool UseSsl { get; set; }
|
public bool UseSsl { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace NzbDrone.Core.Download.Clients.NzbVortex
|
||||||
|
|
||||||
protected override string AddFromNzbFile(RemoteMovie remoteMovie, string filename, byte[] fileContents)
|
protected override string AddFromNzbFile(RemoteMovie remoteMovie, string filename, byte[] fileContents)
|
||||||
{
|
{
|
||||||
var priority = Settings.RecentTvPriority;
|
var priority = remoteMovie.Movie.IsRecentMovie ? Settings.RecentMoviePriority : Settings.OlderMoviePriority;
|
||||||
|
|
||||||
var response = _proxy.DownloadNzb(fileContents, filename, priority, Settings);
|
var response = _proxy.DownloadNzb(fileContents, filename, priority, Settings);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
@ -30,8 +30,8 @@ namespace NzbDrone.Core.Download.Clients.NzbVortex
|
||||||
Host = "localhost";
|
Host = "localhost";
|
||||||
Port = 4321;
|
Port = 4321;
|
||||||
TvCategory = "Movies";
|
TvCategory = "Movies";
|
||||||
RecentTvPriority = (int)NzbVortexPriority.Normal;
|
RecentMoviePriority = (int)NzbVortexPriority.Normal;
|
||||||
OlderTvPriority = (int)NzbVortexPriority.Normal;
|
OlderMoviePriority = (int)NzbVortexPriority.Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)]
|
[FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)]
|
||||||
|
@ -46,11 +46,11 @@ namespace NzbDrone.Core.Download.Clients.NzbVortex
|
||||||
[FieldDefinition(3, Label = "Group", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
[FieldDefinition(3, Label = "Group", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||||
public string TvCategory { get; set; }
|
public string TvCategory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(4, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "Priority to use when grabbing releases that aired within the last 14 days")]
|
[FieldDefinition(4, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
public int RecentTvPriority { get; set; }
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(5, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "Priority to use when grabbing releases that aired over 14 days ago")]
|
[FieldDefinition(5, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(NzbVortexPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
public int OlderTvPriority { get; set; }
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace NzbDrone.Core.Download.Clients.Nzbget
|
||||||
{
|
{
|
||||||
var category = Settings.MovieCategory;
|
var category = Settings.MovieCategory;
|
||||||
|
|
||||||
var priority = Settings.RecentTvPriority;
|
var priority = remoteMovie.Movie.IsRecentMovie ? Settings.RecentMoviePriority : Settings.OlderMoviePriority;
|
||||||
|
|
||||||
var addpaused = Settings.AddPaused;
|
var addpaused = Settings.AddPaused;
|
||||||
|
|
||||||
|
|
|
@ -29,8 +29,8 @@ namespace NzbDrone.Core.Download.Clients.Nzbget
|
||||||
MovieCategory = "Movies";
|
MovieCategory = "Movies";
|
||||||
Username = "nzbget";
|
Username = "nzbget";
|
||||||
Password = "tegbzn6789";
|
Password = "tegbzn6789";
|
||||||
RecentTvPriority = (int)NzbgetPriority.Normal;
|
RecentMoviePriority = (int)NzbgetPriority.Normal;
|
||||||
OlderTvPriority = (int)NzbgetPriority.Normal;
|
OlderMoviePriority = (int)NzbgetPriority.Normal;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)]
|
[FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)]
|
||||||
|
@ -48,11 +48,11 @@ namespace NzbDrone.Core.Download.Clients.Nzbget
|
||||||
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||||
public string MovieCategory { get; set; }
|
public string MovieCategory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "Priority to use when grabbing releases that aired within the last 14 days")]
|
[FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
public int RecentTvPriority { get; set; }
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "Priority to use when grabbing releases that aired over 14 days ago")]
|
[FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(NzbgetPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
public int OlderTvPriority { get; set; }
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(7, Label = "Use SSL", Type = FieldType.Checkbox)]
|
[FieldDefinition(7, Label = "Use SSL", Type = FieldType.Checkbox)]
|
||||||
public bool UseSsl { get; set; }
|
public bool UseSsl { get; set; }
|
||||||
|
|
|
@ -40,6 +40,14 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
_proxy.SetTorrentLabel(hash.ToLower(), Settings.MovieCategory, Settings);
|
_proxy.SetTorrentLabel(hash.ToLower(), Settings.MovieCategory, Settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)QBittorrentPriority.First ||
|
||||||
|
!isRecentMovie && Settings.OlderMoviePriority == (int)QBittorrentPriority.First)
|
||||||
|
{
|
||||||
|
_proxy.MoveTorrentToTopInQueue(hash.ToLower(), Settings);
|
||||||
|
}
|
||||||
|
|
||||||
SetInitialState(hash.ToLower());
|
SetInitialState(hash.ToLower());
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
|
@ -49,9 +57,31 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromFile(filename, fileContent, Settings);
|
_proxy.AddTorrentFromFile(filename, fileContent, Settings);
|
||||||
|
|
||||||
if (Settings.MovieCategory.IsNotNullOrWhiteSpace())
|
try
|
||||||
{
|
{
|
||||||
_proxy.SetTorrentLabel(hash.ToLower(), Settings.MovieCategory, Settings);
|
if (Settings.MovieCategory.IsNotNullOrWhiteSpace())
|
||||||
|
{
|
||||||
|
_proxy.SetTorrentLabel(hash.ToLower(), Settings.MovieCategory, Settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Warn(ex, "Failed to set the torrent label for {0}.", filename);
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)QBittorrentPriority.First ||
|
||||||
|
!isRecentMovie && Settings.OlderMoviePriority == (int)QBittorrentPriority.First)
|
||||||
|
{
|
||||||
|
_proxy.MoveTorrentToTopInQueue(hash.ToLower(), Settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Warn(ex, "Failed to set the torrent priority for {0}.", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
SetInitialState(hash);
|
SetInitialState(hash);
|
||||||
|
@ -165,6 +195,7 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
{
|
{
|
||||||
failures.AddIfNotNull(TestConnection());
|
failures.AddIfNotNull(TestConnection());
|
||||||
if (failures.Any()) return;
|
if (failures.Any()) return;
|
||||||
|
failures.AddIfNotNull(TestPrioritySupport());
|
||||||
failures.AddIfNotNull(TestGetTorrents());
|
failures.AddIfNotNull(TestGetTorrents());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -241,6 +272,41 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ValidationFailure TestPrioritySupport()
|
||||||
|
{
|
||||||
|
var recentPriorityDefault = Settings.RecentMoviePriority == (int)QBittorrentPriority.Last;
|
||||||
|
var olderPriorityDefault = Settings.OlderMoviePriority == (int)QBittorrentPriority.Last;
|
||||||
|
|
||||||
|
if (olderPriorityDefault && recentPriorityDefault)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var config = _proxy.GetConfig(Settings);
|
||||||
|
|
||||||
|
if (!config.QueueingEnabled)
|
||||||
|
{
|
||||||
|
if (!recentPriorityDefault)
|
||||||
|
{
|
||||||
|
return new NzbDroneValidationFailure(nameof(Settings.RecentMoviePriority), "Queueing not enabled") { DetailedDescription = "Torrent Queueing is not enabled in your qBittorrent settings. Enable it in qBittorrent or select 'Last' as priority." };
|
||||||
|
}
|
||||||
|
else if (!olderPriorityDefault)
|
||||||
|
{
|
||||||
|
return new NzbDroneValidationFailure(nameof(Settings.OlderMoviePriority), "Queueing not enabled") { DetailedDescription = "Torrent Queueing is not enabled in your qBittorrent settings. Enable it in qBittorrent or select 'Last' as priority." };
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.Error(ex, "Failed to test qBittorrent");
|
||||||
|
return new NzbDroneValidationFailure(String.Empty, "Unknown exception: " + ex.Message);
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
private ValidationFailure TestGetTorrents()
|
private ValidationFailure TestGetTorrents()
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Download.Clients.QBittorrent
|
namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
{
|
{
|
||||||
|
@ -16,5 +16,8 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "max_ratio_act")]
|
[JsonProperty(PropertyName = "max_ratio_act")]
|
||||||
public bool RemoveOnMaxRatio { get; set; } // Action performed when a torrent reaches the maximum share ratio. [false = pause, true = remove]
|
public bool RemoveOnMaxRatio { get; set; } // Action performed when a torrent reaches the maximum share ratio. [false = pause, true = remove]
|
||||||
|
|
||||||
|
[JsonProperty(PropertyName = "queueing_enabled")]
|
||||||
|
public bool QueueingEnabled { get; set; } = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,10 +40,16 @@ namespace NzbDrone.Core.Download.Clients.QBittorrent
|
||||||
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||||
public string MovieCategory { get; set; }
|
public string MovieCategory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(5, Label = "Initial State", Type = FieldType.Select, SelectOptions = typeof(QBittorrentState), HelpText = "Initial state for torrents added to qBittorrent")]
|
[FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(QBittorrentPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(QBittorrentPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(7, Label = "Initial State", Type = FieldType.Select, SelectOptions = typeof(QBittorrentState), HelpText = "Initial state for torrents added to qBittorrent")]
|
||||||
public int InitialState { get; set; }
|
public int InitialState { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(6, Label = "Use SSL", Type = FieldType.Checkbox, HelpText = "Use a secure connection. See Options -> Web UI -> 'Use HTTPS instead of HTTP' in qBittorrent.")]
|
[FieldDefinition(8, Label = "Use SSL", Type = FieldType.Checkbox, HelpText = "Use a secure connection. See Options -> Web UI -> 'Use HTTPS instead of HTTP' in qBittorrent.")]
|
||||||
public bool UseSsl { get; set; }
|
public bool UseSsl { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
|
|
|
@ -35,7 +35,7 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
protected override string AddFromNzbFile(RemoteMovie remoteMovie, string filename, byte[] fileContents)
|
protected override string AddFromNzbFile(RemoteMovie remoteMovie, string filename, byte[] fileContents)
|
||||||
{
|
{
|
||||||
var category = Settings.MovieCategory;
|
var category = Settings.MovieCategory;
|
||||||
var priority = Settings.RecentTvPriority;
|
var priority = remoteMovie.Movie.IsRecentMovie ? Settings.RecentMoviePriority : Settings.OlderMoviePriority;
|
||||||
|
|
||||||
var response = _proxy.DownloadNzb(fileContents, filename, category, priority, Settings);
|
var response = _proxy.DownloadNzb(fileContents, filename, category, priority, Settings);
|
||||||
|
|
||||||
|
@ -81,7 +81,8 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
queueItem.CanBeRemoved = true;
|
queueItem.CanBeRemoved = true;
|
||||||
queueItem.CanMoveFiles = true;
|
queueItem.CanMoveFiles = true;
|
||||||
|
|
||||||
if (sabQueue.Paused || sabQueueItem.Status == SabnzbdDownloadStatus.Paused)
|
if ((sabQueue.Paused && sabQueueItem.Priority != SabnzbdPriority.Force) ||
|
||||||
|
sabQueueItem.Status == SabnzbdDownloadStatus.Paused)
|
||||||
{
|
{
|
||||||
queueItem.Status = DownloadItemStatus.Paused;
|
queueItem.Status = DownloadItemStatus.Paused;
|
||||||
|
|
||||||
|
|
|
@ -39,8 +39,8 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
Host = "localhost";
|
Host = "localhost";
|
||||||
Port = 8080;
|
Port = 8080;
|
||||||
MovieCategory = "movies";
|
MovieCategory = "movies";
|
||||||
RecentTvPriority = (int)SabnzbdPriority.Default;
|
RecentMoviePriority = (int)SabnzbdPriority.Default;
|
||||||
OlderTvPriority = (int)SabnzbdPriority.Default;
|
OlderMoviePriority = (int)SabnzbdPriority.Default;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)]
|
[FieldDefinition(0, Label = "Host", Type = FieldType.Textbox)]
|
||||||
|
@ -61,11 +61,11 @@ namespace NzbDrone.Core.Download.Clients.Sabnzbd
|
||||||
[FieldDefinition(5, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
[FieldDefinition(5, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||||
public string MovieCategory { get; set; }
|
public string MovieCategory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(6, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "Priority to use when grabbing releases that aired within the last 14 days")]
|
[FieldDefinition(6, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
public int RecentTvPriority { get; set; }
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(7, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "Priority to use when grabbing releases that aired over 14 days ago")]
|
[FieldDefinition(7, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(SabnzbdPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
public int OlderTvPriority { get; set; }
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(8, Label = "Use SSL", Type = FieldType.Checkbox)]
|
[FieldDefinition(8, Label = "Use SSL", Type = FieldType.Checkbox)]
|
||||||
public bool UseSsl { get; set; }
|
public bool UseSsl { get; set; }
|
||||||
|
|
|
@ -139,12 +139,30 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||||
protected override string AddFromMagnetLink(RemoteMovie remoteMovie, string hash, string magnetLink)
|
protected override string AddFromMagnetLink(RemoteMovie remoteMovie, string hash, string magnetLink)
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromUrl(magnetLink, GetDownloadDirectory(), Settings);
|
_proxy.AddTorrentFromUrl(magnetLink, GetDownloadDirectory(), Settings);
|
||||||
|
|
||||||
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)TransmissionPriority.First ||
|
||||||
|
!isRecentMovie && Settings.OlderMoviePriority == (int)TransmissionPriority.First)
|
||||||
|
{
|
||||||
|
_proxy.MoveTorrentToTopInQueue(hash, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override string AddFromTorrentFile(RemoteMovie remoteMovie, string hash, string filename, byte[] fileContent)
|
protected override string AddFromTorrentFile(RemoteMovie remoteMovie, string hash, string filename, byte[] fileContent)
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromData(fileContent, GetDownloadDirectory(), Settings);
|
_proxy.AddTorrentFromData(fileContent, GetDownloadDirectory(), Settings);
|
||||||
|
|
||||||
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)TransmissionPriority.First ||
|
||||||
|
!isRecentMovie && Settings.OlderMoviePriority == (int)TransmissionPriority.First)
|
||||||
|
{
|
||||||
|
_proxy.MoveTorrentToTopInQueue(hash, Settings);
|
||||||
|
}
|
||||||
|
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
|
@ -57,7 +57,13 @@ namespace NzbDrone.Core.Download.Clients.Transmission
|
||||||
[FieldDefinition(6, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default Transmission location")]
|
[FieldDefinition(6, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default Transmission location")]
|
||||||
public string MovieDirectory { get; set; }
|
public string MovieDirectory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(7, Label = "Use SSL", Type = FieldType.Checkbox)]
|
[FieldDefinition(7, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(8, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(TransmissionPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(9, Label = "Use SSL", Type = FieldType.Checkbox)]
|
||||||
public bool UseSsl { get; set; }
|
public bool UseSsl { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
|
|
|
@ -39,7 +39,9 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
|
|
||||||
protected override string AddFromMagnetLink(RemoteMovie remoteMovie, string hash, string magnetLink)
|
protected override string AddFromMagnetLink(RemoteMovie remoteMovie, string hash, string magnetLink)
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromUrl(magnetLink, Settings.MovieCategory, RTorrentPriority.Normal, Settings.MovieDirectory, Settings);
|
var priority = (RTorrentPriority)(remoteMovie.Movie.IsRecentMovie ? Settings.RecentMoviePriority : Settings.OlderMoviePriority);
|
||||||
|
|
||||||
|
_proxy.AddTorrentFromUrl(magnetLink, Settings.MovieCategory, priority, Settings.MovieDirectory, Settings);
|
||||||
|
|
||||||
var tries = 10;
|
var tries = 10;
|
||||||
var retryDelay = 500;
|
var retryDelay = 500;
|
||||||
|
@ -57,7 +59,9 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
|
|
||||||
protected override string AddFromTorrentFile(RemoteMovie remoteMovie, string hash, string filename, byte[] fileContent)
|
protected override string AddFromTorrentFile(RemoteMovie remoteMovie, string hash, string filename, byte[] fileContent)
|
||||||
{
|
{
|
||||||
_proxy.AddTorrentFromFile(filename, fileContent, Settings.MovieCategory, RTorrentPriority.Normal, Settings.MovieDirectory, Settings);
|
var priority = (RTorrentPriority)(remoteMovie.Movie.IsRecentMovie ? Settings.RecentMoviePriority : Settings.OlderMoviePriority);
|
||||||
|
|
||||||
|
_proxy.AddTorrentFromFile(filename, fileContent, Settings.MovieCategory, priority, Settings.MovieDirectory, Settings);
|
||||||
|
|
||||||
var tries = 10;
|
var tries = 10;
|
||||||
var retryDelay = 500;
|
var retryDelay = 500;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
@ -53,6 +53,12 @@ namespace NzbDrone.Core.Download.Clients.RTorrent
|
||||||
[FieldDefinition(7, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default rTorrent location")]
|
[FieldDefinition(7, Label = "Directory", Type = FieldType.Textbox, Advanced = true, HelpText = "Optional location to put downloads in, leave blank to use the default rTorrent location")]
|
||||||
public string MovieDirectory { get; set; }
|
public string MovieDirectory { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(8, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(RTorrentPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(9, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(RTorrentPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
|
|
@ -41,13 +41,13 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||||
_proxy.AddTorrentFromUrl(magnetLink, Settings);
|
_proxy.AddTorrentFromUrl(magnetLink, Settings);
|
||||||
_proxy.SetTorrentLabel(hash, Settings.MovieCategory, Settings);
|
_proxy.SetTorrentLabel(hash, Settings.MovieCategory, Settings);
|
||||||
|
|
||||||
/*var isRecentEpisode = remoteEpisode.IsRecentEpisode();
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
if (isRecentEpisode && Settings.RecentTvPriority == (int)UTorrentPriority.First ||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)UTorrentPriority.First ||
|
||||||
!isRecentEpisode && Settings.OlderTvPriority == (int)UTorrentPriority.First)
|
!isRecentMovie && Settings.OlderMoviePriority == (int)UTorrentPriority.First)
|
||||||
{
|
{
|
||||||
_proxy.MoveTorrentToTopInQueue(hash, Settings);
|
_proxy.MoveTorrentToTopInQueue(hash, Settings);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
_proxy.SetState(hash, (UTorrentState)Settings.IntialState, Settings);
|
_proxy.SetState(hash, (UTorrentState)Settings.IntialState, Settings);
|
||||||
|
|
||||||
|
@ -59,13 +59,13 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||||
_proxy.AddTorrentFromFile(filename, fileContent, Settings);
|
_proxy.AddTorrentFromFile(filename, fileContent, Settings);
|
||||||
_proxy.SetTorrentLabel(hash, Settings.MovieCategory, Settings);
|
_proxy.SetTorrentLabel(hash, Settings.MovieCategory, Settings);
|
||||||
|
|
||||||
/*var isRecentEpisode = remoteEpisode.IsRecentEpisode();
|
var isRecentMovie = remoteMovie.Movie.IsRecentMovie;
|
||||||
|
|
||||||
if (isRecentEpisode && Settings.RecentTvPriority == (int)UTorrentPriority.First ||
|
if (isRecentMovie && Settings.RecentMoviePriority == (int)UTorrentPriority.First ||
|
||||||
!isRecentEpisode && Settings.OlderTvPriority == (int)UTorrentPriority.First)
|
!isRecentMovie && Settings.OlderMoviePriority == (int)UTorrentPriority.First)
|
||||||
{
|
{
|
||||||
_proxy.MoveTorrentToTopInQueue(hash, Settings);
|
_proxy.MoveTorrentToTopInQueue(hash, Settings);
|
||||||
}*/
|
}
|
||||||
|
|
||||||
_proxy.SetState(hash, (UTorrentState)Settings.IntialState, Settings);
|
_proxy.SetState(hash, (UTorrentState)Settings.IntialState, Settings);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
@ -41,11 +41,11 @@ namespace NzbDrone.Core.Download.Clients.UTorrent
|
||||||
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
[FieldDefinition(4, Label = "Category", Type = FieldType.Textbox, HelpText = "Adding a category specific to Radarr avoids conflicts with unrelated downloads, but it's optional")]
|
||||||
public string MovieCategory { get; set; }
|
public string MovieCategory { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing releases that aired within the last 14 days")]
|
[FieldDefinition(5, Label = "Recent Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing movies that released within the last 21 days")]
|
||||||
public int RecentTvPriority { get; set; }
|
public int RecentMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing releases that aired over 14 days ago")]
|
[FieldDefinition(6, Label = "Older Priority", Type = FieldType.Select, SelectOptions = typeof(UTorrentPriority), HelpText = "Priority to use when grabbing movies that released over 21 days ago")]
|
||||||
public int OlderTvPriority { get; set; }
|
public int OlderMoviePriority { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(7, Label = "Initial State", Type = FieldType.Select, SelectOptions = typeof(UTorrentState), HelpText = "Initial state for torrents added to uTorrent")]
|
[FieldDefinition(7, Label = "Initial State", Type = FieldType.Select, SelectOptions = typeof(UTorrentState), HelpText = "Initial state for torrents added to uTorrent")]
|
||||||
public int IntialState { get; set; }
|
public int IntialState { get; set; }
|
||||||
|
|
|
@ -61,6 +61,24 @@ namespace NzbDrone.Core.Movies
|
||||||
public string YouTubeTrailerId{ get; set; }
|
public string YouTubeTrailerId{ get; set; }
|
||||||
public string Studio { get; set; }
|
public string Studio { get; set; }
|
||||||
|
|
||||||
|
public bool IsRecentMovie
|
||||||
|
{
|
||||||
|
get
|
||||||
|
{
|
||||||
|
if (PhysicalRelease.HasValue)
|
||||||
|
{
|
||||||
|
return PhysicalRelease.Value >= DateTime.UtcNow.AddDays(-21);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (InCinemas.HasValue)
|
||||||
|
{
|
||||||
|
return InCinemas.Value >= DateTime.UtcNow.AddDays(-120);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public bool HasFile => MovieFileId > 0;
|
public bool HasFile => MovieFileId > 0;
|
||||||
|
|
||||||
public string FolderName()
|
public string FolderName()
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<label class="checkbox toggle well">
|
<label class="checkbox toggle well">
|
||||||
<input type="checkbox" name="fields.{{order}}.value"/>
|
<input type="checkbox" name="fields.{{order}}.value" validation-name="{{name}}"/>
|
||||||
<p>
|
<p>
|
||||||
<span>Yes</span>
|
<span>Yes</span>
|
||||||
<span>No</span>
|
<span>No</span>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<label class="col-sm-3 control-label">{{label}}</label>
|
<label class="col-sm-3 control-label">{{label}}</label>
|
||||||
|
|
||||||
<div class="col-sm-5">
|
<div class="col-sm-5">
|
||||||
<select name="fields.{{order}}.value" class="form-control">
|
<select name="fields.{{order}}.value" validation-name="{{name}}" class="form-control">
|
||||||
{{#each selectOptions}}
|
{{#each selectOptions}}
|
||||||
<option value="{{value}}">{{name}}</option>
|
<option value="{{value}}">{{name}}</option>
|
||||||
{{/each}}
|
{{/each}}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue