From 6df61e305dea6437dbc28f389903e0267def6d4c Mon Sep 17 00:00:00 2001 From: Taloth Saldono Date: Thu, 3 May 2018 21:40:57 +0200 Subject: [PATCH] Added Seed Time and Season-Pack seed time. --- .../Configuration/ISeedConfigProvider.cs | 10 ------- .../Configuration/SeedConfigProvider.cs | 27 ++++++++++++++----- src/NzbDrone.Core/Download/DownloadService.cs | 2 +- .../Indexers/SeedCriteriaSettings.cs | 12 ++++----- 4 files changed, 28 insertions(+), 23 deletions(-) delete mode 100644 src/NzbDrone.Core/Configuration/ISeedConfigProvider.cs diff --git a/src/NzbDrone.Core/Configuration/ISeedConfigProvider.cs b/src/NzbDrone.Core/Configuration/ISeedConfigProvider.cs deleted file mode 100644 index ec91ff21a..000000000 --- a/src/NzbDrone.Core/Configuration/ISeedConfigProvider.cs +++ /dev/null @@ -1,10 +0,0 @@ -using NzbDrone.Core.Download.Clients; -using NzbDrone.Core.Parser.Model; - -namespace NzbDrone.Core.Configuration -{ - public interface ISeedConfigProvider - { - TorrentSeedConfiguration GetSeedConfiguration(ReleaseInfo release); - } -} diff --git a/src/NzbDrone.Core/Configuration/SeedConfigProvider.cs b/src/NzbDrone.Core/Configuration/SeedConfigProvider.cs index ab207b0a2..e9ed803c2 100644 --- a/src/NzbDrone.Core/Configuration/SeedConfigProvider.cs +++ b/src/NzbDrone.Core/Configuration/SeedConfigProvider.cs @@ -1,9 +1,15 @@ -using NzbDrone.Core.Download.Clients; +using System; +using NzbDrone.Core.Download.Clients; using NzbDrone.Core.Indexers; using NzbDrone.Core.Parser.Model; namespace NzbDrone.Core.Configuration { + public interface ISeedConfigProvider + { + TorrentSeedConfiguration GetSeedConfiguration(RemoteEpisode release); + } + public class SeedConfigProvider: ISeedConfigProvider { private readonly IIndexerFactory _indexerFactory; @@ -13,18 +19,27 @@ namespace NzbDrone.Core.Configuration _indexerFactory = indexerFactory; } - public TorrentSeedConfiguration GetSeedConfiguration(ReleaseInfo release) + public TorrentSeedConfiguration GetSeedConfiguration(RemoteEpisode remoteEpisode) { - if (release.DownloadProtocol != DownloadProtocol.Torrent) return null; + if (remoteEpisode.Release.DownloadProtocol != DownloadProtocol.Torrent) return null; - var indexer = _indexerFactory.Get(release.IndexerId); + var indexer = _indexerFactory.Get(remoteEpisode.Release.IndexerId); + var torrentIndexerSettings = indexer?.Settings as ITorrentIndexerSettings; - if (indexer.Settings is ITorrentIndexerSettings torrentIndexerSettings) + if (torrentIndexerSettings != null) { - return new TorrentSeedConfiguration + var seedConfig = new TorrentSeedConfiguration { Ratio = torrentIndexerSettings.SeedCriteria.SeedRatio }; + + var seedTime = remoteEpisode.ParsedEpisodeInfo.FullSeason ? torrentIndexerSettings.SeedCriteria.SeasonPackSeedTime : torrentIndexerSettings.SeedCriteria.SeedTime; + if (seedTime.HasValue) + { + seedConfig.SeedTime = TimeSpan.FromSeconds(seedTime.Value); + } + + return seedConfig; } return null; diff --git a/src/NzbDrone.Core/Download/DownloadService.cs b/src/NzbDrone.Core/Download/DownloadService.cs index 86d3c324b..179a72fab 100644 --- a/src/NzbDrone.Core/Download/DownloadService.cs +++ b/src/NzbDrone.Core/Download/DownloadService.cs @@ -61,7 +61,7 @@ namespace NzbDrone.Core.Download } // Get the seed configuration for this release. - remoteEpisode.SeedConfiguration = _seedConfigProvider.GetSeedConfiguration(remoteEpisode.Release); + remoteEpisode.SeedConfiguration = _seedConfigProvider.GetSeedConfiguration(remoteEpisode); // Limit grabs to 2 per second. if (remoteEpisode.Release.DownloadUrl.IsNotNullOrWhiteSpace() && !remoteEpisode.Release.DownloadUrl.StartsWith("magnet:")) diff --git a/src/NzbDrone.Core/Indexers/SeedCriteriaSettings.cs b/src/NzbDrone.Core/Indexers/SeedCriteriaSettings.cs index c50495819..6b7d608a7 100644 --- a/src/NzbDrone.Core/Indexers/SeedCriteriaSettings.cs +++ b/src/NzbDrone.Core/Indexers/SeedCriteriaSettings.cs @@ -13,8 +13,8 @@ namespace NzbDrone.Core.Indexers public SeedCriteriaSettingsValidator() { RuleFor(c => c.SeedRatio).GreaterThan(0.0).When(c => c.SeedRatio.HasValue); - //RuleFor(c => c.SeedTime).GreaterThan(0).When(c => c.SeedTime.HasValue); - //RuleFor(c => c.SeasonPackSeedTime).GreaterThan(0).When(c => c.SeasonPackSeedTime.HasValue); + RuleFor(c => c.SeedTime).GreaterThan(0).When(c => c.SeedTime.HasValue); + RuleFor(c => c.SeasonPackSeedTime).GreaterThan(0).When(c => c.SeasonPackSeedTime.HasValue); } } @@ -25,10 +25,10 @@ namespace NzbDrone.Core.Indexers [FieldDefinition(0, Type = FieldType.Textbox, Label = "Seed Ratio", HelpText = "The ratio a torrent should reach before stopping, empty is download client's default", Advanced = true)] public double? SeedRatio { get; set; } - //[FieldDefinition(1, Type = FieldType.Textbox, Label = "Seed Time", HelpText = "The time a torrent should be seeded before stopping, empty is download client's default", Advanced = true)] - //public int? SeedTime { get; set; } + [FieldDefinition(1, Type = FieldType.Textbox, Label = "Seed Time", HelpText = "The time a torrent should be seeded before stopping, empty is download client's default", Advanced = true)] + public int? SeedTime { get; set; } - //[FieldDefinition(2, Type = FieldType.Textbox, Label = "Season-Pack Seed Time", HelpText = "The time a torrent should be seeded before stopping, empty is download client's default", Advanced = true)] - //public int? SeasonPackSeedTime { get; set; } + [FieldDefinition(2, Type = FieldType.Textbox, Label = "Season-Pack Seed Time", HelpText = "The time a torrent should be seeded before stopping, empty is download client's default", Advanced = true)] + public int? SeasonPackSeedTime { get; set; } } }