mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-16 11:37:58 +02:00
New: Ability to set minimum seeders on a per indexer basis
This commit is contained in:
parent
c2b66cf524
commit
a41b5723d4
@ -1,38 +0,0 @@
|
|||||||
using NLog;
|
|
||||||
using NzbDrone.Core.IndexerSearch.Definitions;
|
|
||||||
using NzbDrone.Core.Parser.Model;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.DecisionEngine.Specifications.Search
|
|
||||||
{
|
|
||||||
public class TorrentSeedingSpecification : IDecisionEngineSpecification
|
|
||||||
{
|
|
||||||
private readonly Logger _logger;
|
|
||||||
|
|
||||||
public TorrentSeedingSpecification(Logger logger)
|
|
||||||
{
|
|
||||||
_logger = logger;
|
|
||||||
}
|
|
||||||
|
|
||||||
public SpecificationPriority Priority => SpecificationPriority.Default;
|
|
||||||
public RejectionType Type => RejectionType.Permanent;
|
|
||||||
|
|
||||||
|
|
||||||
public Decision IsSatisfiedBy(RemoteEpisode remoteEpisode, SearchCriteriaBase searchCriteria)
|
|
||||||
{
|
|
||||||
var torrentInfo = remoteEpisode.Release as TorrentInfo;
|
|
||||||
|
|
||||||
if (torrentInfo == null)
|
|
||||||
{
|
|
||||||
return Decision.Accept();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (torrentInfo.Seeders != null && torrentInfo.Seeders < 1)
|
|
||||||
{
|
|
||||||
_logger.Debug("Not enough seeders. ({0})", torrentInfo.Seeders);
|
|
||||||
return Decision.Reject("Not enough seeders. ({0})", torrentInfo.Seeders);
|
|
||||||
}
|
|
||||||
|
|
||||||
return Decision.Accept();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,51 @@
|
|||||||
|
using System.Linq;
|
||||||
|
using NLog;
|
||||||
|
using NzbDrone.Common.Reflection;
|
||||||
|
using NzbDrone.Core.Indexers;
|
||||||
|
using NzbDrone.Core.IndexerSearch.Definitions;
|
||||||
|
using NzbDrone.Core.Parser.Model;
|
||||||
|
|
||||||
|
namespace NzbDrone.Core.DecisionEngine.Specifications.Search
|
||||||
|
{
|
||||||
|
public class TorrentSeedingSpecification : IDecisionEngineSpecification
|
||||||
|
{
|
||||||
|
private readonly IndexerFactory _indexerFactory;
|
||||||
|
private readonly Logger _logger;
|
||||||
|
|
||||||
|
public TorrentSeedingSpecification(IndexerFactory indexerFactory, Logger logger)
|
||||||
|
{
|
||||||
|
_indexerFactory = indexerFactory;
|
||||||
|
_logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SpecificationPriority Priority => SpecificationPriority.Default;
|
||||||
|
public RejectionType Type => RejectionType.Permanent;
|
||||||
|
|
||||||
|
|
||||||
|
public Decision IsSatisfiedBy(RemoteEpisode remoteEpisode, SearchCriteriaBase searchCriteria)
|
||||||
|
{
|
||||||
|
var torrentInfo = remoteEpisode.Release as TorrentInfo;
|
||||||
|
|
||||||
|
if (torrentInfo == null)
|
||||||
|
{
|
||||||
|
return Decision.Accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
var indexer = _indexerFactory.Get(torrentInfo.IndexerId);
|
||||||
|
var torrentIndexerSettings = indexer.Settings as ITorrentIndexerSettings;
|
||||||
|
|
||||||
|
if (torrentIndexerSettings != null)
|
||||||
|
{
|
||||||
|
var minimumSeeders = torrentIndexerSettings.MinimumSeeders;
|
||||||
|
|
||||||
|
if (torrentInfo.Seeders.HasValue && torrentInfo.Seeders.Value < minimumSeeders)
|
||||||
|
{
|
||||||
|
_logger.Debug("Not enough seeders: {0}. Minimum seeders: {1}", torrentInfo.Seeders, minimumSeeders);
|
||||||
|
return Decision.Reject("Not enough seeders: {0}. Minimum seeders: {1}", torrentInfo.Seeders, minimumSeeders);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return Decision.Accept();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,6 @@
|
|||||||
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.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.BitMeTv
|
namespace NzbDrone.Core.Indexers.BitMeTv
|
||||||
@ -23,13 +22,14 @@ public BitMeTvSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BitMeTvSettings : IIndexerSettings
|
public class BitMeTvSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly BitMeTvSettingsValidator Validator = new BitMeTvSettingsValidator();
|
private static readonly BitMeTvSettingsValidator Validator = new BitMeTvSettingsValidator();
|
||||||
|
|
||||||
public BitMeTvSettings()
|
public BitMeTvSettings()
|
||||||
{
|
{
|
||||||
BaseUrl = "https://www.bitmetv.org";
|
BaseUrl = "https://www.bitmetv.org";
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Website URL")]
|
[FieldDefinition(0, Label = "Website URL")]
|
||||||
@ -44,6 +44,9 @@ public BitMeTvSettings()
|
|||||||
[FieldDefinition(3, Label = "Cookie", HelpText = "BitMeTv uses a login cookie needed to access the rss, you'll have to retrieve it via a browser.")]
|
[FieldDefinition(3, Label = "Cookie", HelpText = "BitMeTv uses a login cookie needed to access the rss, you'll have to retrieve it via a browser.")]
|
||||||
public string Cookie { get; set; }
|
public string Cookie { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(4, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.BroadcastheNet
|
namespace NzbDrone.Core.Indexers.BroadcastheNet
|
||||||
@ -14,13 +13,14 @@ public BroadcastheNetSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class BroadcastheNetSettings : IIndexerSettings
|
public class BroadcastheNetSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly BroadcastheNetSettingsValidator Validator = new BroadcastheNetSettingsValidator();
|
private static readonly BroadcastheNetSettingsValidator Validator = new BroadcastheNetSettingsValidator();
|
||||||
|
|
||||||
public BroadcastheNetSettings()
|
public BroadcastheNetSettings()
|
||||||
{
|
{
|
||||||
BaseUrl = "http://api.broadcasthe.net/";
|
BaseUrl = "http://api.broadcasthe.net/";
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "API URL", Advanced = true, HelpText = "Do not change this unless you know what you're doing. Since your API key will be sent to that host.")]
|
[FieldDefinition(0, Label = "API URL", Advanced = true, HelpText = "Do not change this unless you know what you're doing. Since your API key will be sent to that host.")]
|
||||||
@ -29,6 +29,9 @@ public BroadcastheNetSettings()
|
|||||||
[FieldDefinition(1, Label = "API Key")]
|
[FieldDefinition(1, Label = "API Key")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(2, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.HDBits
|
namespace NzbDrone.Core.Indexers.HDBits
|
||||||
@ -14,13 +13,14 @@ public HDBitsSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HDBitsSettings : IIndexerSettings
|
public class HDBitsSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly HDBitsSettingsValidator Validator = new HDBitsSettingsValidator();
|
private static readonly HDBitsSettingsValidator Validator = new HDBitsSettingsValidator();
|
||||||
|
|
||||||
public HDBitsSettings()
|
public HDBitsSettings()
|
||||||
{
|
{
|
||||||
BaseUrl = "https://hdbits.org";
|
BaseUrl = "https://hdbits.org";
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Username")]
|
[FieldDefinition(0, Label = "Username")]
|
||||||
@ -32,6 +32,9 @@ public HDBitsSettings()
|
|||||||
[FieldDefinition(2, Label = "API URL", Advanced = true, HelpText = "Do not change this unless you know what you're doing. Since your API key will be sent to that host.")]
|
[FieldDefinition(2, Label = "API URL", Advanced = true, HelpText = "Do not change this unless you know what you're doing. Since your API key will be sent to that host.")]
|
||||||
public string BaseUrl { get; set; }
|
public string BaseUrl { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,8 +1,4 @@
|
|||||||
using System;
|
using NzbDrone.Core.ThingiProvider;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Text;
|
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers
|
namespace NzbDrone.Core.Indexers
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
@ -21,17 +21,21 @@ public IPTorrentsSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IPTorrentsSettings : IIndexerSettings
|
public class IPTorrentsSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly IPTorrentsSettingsValidator Validator = new IPTorrentsSettingsValidator();
|
private static readonly IPTorrentsSettingsValidator Validator = new IPTorrentsSettingsValidator();
|
||||||
|
|
||||||
public IPTorrentsSettings()
|
public IPTorrentsSettings()
|
||||||
{
|
{
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Feed URL", HelpText = "The full RSS feed url generated by IPTorrents, using only the categories you selected (HD, SD, x264, etc ...)")]
|
[FieldDefinition(0, Label = "Feed URL", HelpText = "The full RSS feed url generated by IPTorrents, using only the categories you selected (HD, SD, x264, etc ...)")]
|
||||||
public string BaseUrl { get; set; }
|
public string BaseUrl { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(1, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
7
src/NzbDrone.Core/Indexers/ITorrentIndexerSettings.cs
Normal file
7
src/NzbDrone.Core/Indexers/ITorrentIndexerSettings.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
namespace NzbDrone.Core.Indexers
|
||||||
|
{
|
||||||
|
public interface ITorrentIndexerSettings : IIndexerSettings
|
||||||
|
{
|
||||||
|
int MinimumSeeders { get; set; }
|
||||||
|
}
|
||||||
|
}
|
7
src/NzbDrone.Core/Indexers/IndexerDefaults.cs
Normal file
7
src/NzbDrone.Core/Indexers/IndexerDefaults.cs
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
namespace NzbDrone.Core.Indexers
|
||||||
|
{
|
||||||
|
public static class IndexerDefaults
|
||||||
|
{
|
||||||
|
public const int MINIMUM_SEEDERS = 1;
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
@ -79,6 +79,9 @@ public NewznabSettings()
|
|||||||
[FieldDefinition(4, Label = "Additional Parameters", HelpText = "Additional Newznab parameters", Advanced = true)]
|
[FieldDefinition(4, Label = "Additional Parameters", HelpText = "Additional Newznab parameters", Advanced = true)]
|
||||||
public string AdditionalParameters { get; set; }
|
public string AdditionalParameters { get; set; }
|
||||||
|
|
||||||
|
// Field 5 is used by TorznabSettings MinimumSeeders
|
||||||
|
// If you need to add another field here, update TorznabSettings as well and this comment
|
||||||
|
|
||||||
public virtual NzbDroneValidationResult Validate()
|
public virtual NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
namespace NzbDrone.Core.Indexers.Nyaa
|
namespace NzbDrone.Core.Indexers.Nyaa
|
||||||
@ -14,7 +13,7 @@ public NyaaSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class NyaaSettings : IIndexerSettings
|
public class NyaaSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly NyaaSettingsValidator Validator = new NyaaSettingsValidator();
|
private static readonly NyaaSettingsValidator Validator = new NyaaSettingsValidator();
|
||||||
|
|
||||||
@ -22,6 +21,7 @@ public NyaaSettings()
|
|||||||
{
|
{
|
||||||
BaseUrl = "https://www.nyaa.se";
|
BaseUrl = "https://www.nyaa.se";
|
||||||
AdditionalParameters = "&cats=1_37&filter=1";
|
AdditionalParameters = "&cats=1_37&filter=1";
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Website URL")]
|
[FieldDefinition(0, Label = "Website URL")]
|
||||||
@ -30,6 +30,9 @@ public NyaaSettings()
|
|||||||
[FieldDefinition(1, Label = "Additional Parameters", Advanced = true, HelpText = "Please note if you change the category you will have to add required/restricted rules about the subgroups to avoid foreign language releases.")]
|
[FieldDefinition(1, Label = "Additional Parameters", Advanced = true, HelpText = "Please note if you change the category you will have to add required/restricted rules about the subgroups to avoid foreign language releases.")]
|
||||||
public string AdditionalParameters { get; set; }
|
public string AdditionalParameters { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(2, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.Rarbg
|
namespace NzbDrone.Core.Indexers.Rarbg
|
||||||
@ -13,7 +12,7 @@ public RarbgSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RarbgSettings : IIndexerSettings
|
public class RarbgSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly RarbgSettingsValidator Validator = new RarbgSettingsValidator();
|
private static readonly RarbgSettingsValidator Validator = new RarbgSettingsValidator();
|
||||||
|
|
||||||
@ -21,6 +20,7 @@ public RarbgSettings()
|
|||||||
{
|
{
|
||||||
BaseUrl = "https://torrentapi.org";
|
BaseUrl = "https://torrentapi.org";
|
||||||
RankedOnly = false;
|
RankedOnly = false;
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "API URL", HelpText = "URL to Rarbg api, not the website.")]
|
[FieldDefinition(0, Label = "API URL", HelpText = "URL to Rarbg api, not the website.")]
|
||||||
@ -32,6 +32,9 @@ public RarbgSettings()
|
|||||||
[FieldDefinition(2, Type = FieldType.Captcha, Label = "CAPTCHA Token", HelpText = "CAPTCHA Clearance token used to handle CloudFlare Anti-DDOS measures on shared-ip VPNs.")]
|
[FieldDefinition(2, Type = FieldType.Captcha, Label = "CAPTCHA Token", HelpText = "CAPTCHA Clearance token used to handle CloudFlare Anti-DDOS measures on shared-ip VPNs.")]
|
||||||
public string CaptchaToken { get; set; }
|
public string CaptchaToken { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.TorrentRss
|
namespace NzbDrone.Core.Indexers.TorrentRss
|
||||||
@ -13,7 +12,7 @@ public TorrentRssIndexerSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TorrentRssIndexerSettings : IIndexerSettings
|
public class TorrentRssIndexerSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly TorrentRssIndexerSettingsValidator validator = new TorrentRssIndexerSettingsValidator();
|
private static readonly TorrentRssIndexerSettingsValidator validator = new TorrentRssIndexerSettingsValidator();
|
||||||
|
|
||||||
@ -21,6 +20,7 @@ public TorrentRssIndexerSettings()
|
|||||||
{
|
{
|
||||||
BaseUrl = string.Empty;
|
BaseUrl = string.Empty;
|
||||||
AllowZeroSize = false;
|
AllowZeroSize = false;
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Full RSS Feed URL")]
|
[FieldDefinition(0, Label = "Full RSS Feed URL")]
|
||||||
@ -32,6 +32,9 @@ public TorrentRssIndexerSettings()
|
|||||||
[FieldDefinition(2, Type = FieldType.Checkbox, Label = "Allow Zero Size", HelpText="Enabling this will allow you to use feeds that don't specify release size, but be careful, size related checks will not be performed.")]
|
[FieldDefinition(2, Type = FieldType.Checkbox, Label = "Allow Zero Size", HelpText="Enabling this will allow you to use feeds that don't specify release size, but be careful, size related checks will not be performed.")]
|
||||||
public bool AllowZeroSize { get; set; }
|
public bool AllowZeroSize { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(validator.Validate(this));
|
return new NzbDroneValidationResult(validator.Validate(this));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.ThingiProvider;
|
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.Torrentleech
|
namespace NzbDrone.Core.Indexers.Torrentleech
|
||||||
@ -14,13 +13,14 @@ public TorrentleechSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TorrentleechSettings : IIndexerSettings
|
public class TorrentleechSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly TorrentleechSettingsValidator Validator = new TorrentleechSettingsValidator();
|
private static readonly TorrentleechSettingsValidator Validator = new TorrentleechSettingsValidator();
|
||||||
|
|
||||||
public TorrentleechSettings()
|
public TorrentleechSettings()
|
||||||
{
|
{
|
||||||
BaseUrl = "http://rss.torrentleech.org";
|
BaseUrl = "http://rss.torrentleech.org";
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Website URL")]
|
[FieldDefinition(0, Label = "Website URL")]
|
||||||
@ -29,6 +29,9 @@ public TorrentleechSettings()
|
|||||||
[FieldDefinition(1, Label = "API Key")]
|
[FieldDefinition(1, Label = "API Key")]
|
||||||
public string ApiKey { get; set; }
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(2, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using FluentValidation.Results;
|
using FluentValidation.Results;
|
||||||
using NzbDrone.Common.Extensions;
|
using NzbDrone.Common.Extensions;
|
||||||
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.Indexers.Newznab;
|
using NzbDrone.Core.Indexers.Newznab;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
|
||||||
@ -46,10 +47,18 @@ public TorznabSettingsValidator()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TorznabSettings : NewznabSettings
|
public class TorznabSettings : NewznabSettings, ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly TorznabSettingsValidator Validator = new TorznabSettingsValidator();
|
private static readonly TorznabSettingsValidator Validator = new TorznabSettingsValidator();
|
||||||
|
|
||||||
|
public TorznabSettings()
|
||||||
|
{
|
||||||
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
|
}
|
||||||
|
|
||||||
|
[FieldDefinition(5, Type = FieldType.Textbox, Label = "Minimum Seeders", HelpText = "Minimum number of seeders required.", Advanced = true)]
|
||||||
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
public override NzbDroneValidationResult Validate()
|
public override NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
return new NzbDroneValidationResult(Validator.Validate(this));
|
return new NzbDroneValidationResult(Validator.Validate(this));
|
||||||
|
@ -345,7 +345,7 @@
|
|||||||
<Compile Include="DecisionEngine\Specifications\Search\SeasonMatchSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\Search\SeasonMatchSpecification.cs" />
|
||||||
<Compile Include="DecisionEngine\Specifications\Search\SeriesSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\Search\SeriesSpecification.cs" />
|
||||||
<Compile Include="DecisionEngine\Specifications\Search\SingleEpisodeSearchMatchSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\Search\SingleEpisodeSearchMatchSpecification.cs" />
|
||||||
<Compile Include="DecisionEngine\Specifications\Search\TorrentSeedingSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\TorrentSeedingSpecification.cs" />
|
||||||
<Compile Include="DecisionEngine\Specifications\SameEpisodesGrabSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\SameEpisodesGrabSpecification.cs" />
|
||||||
<Compile Include="DecisionEngine\Specifications\RawDiskSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\RawDiskSpecification.cs" />
|
||||||
<Compile Include="DecisionEngine\Specifications\UpgradeDiskSpecification.cs" />
|
<Compile Include="DecisionEngine\Specifications\UpgradeDiskSpecification.cs" />
|
||||||
@ -630,6 +630,7 @@
|
|||||||
<Compile Include="Indexers\IIndexerRequestGenerator.cs" />
|
<Compile Include="Indexers\IIndexerRequestGenerator.cs" />
|
||||||
<Compile Include="Indexers\IIndexerSettings.cs" />
|
<Compile Include="Indexers\IIndexerSettings.cs" />
|
||||||
<Compile Include="Indexers\IndexerBase.cs" />
|
<Compile Include="Indexers\IndexerBase.cs" />
|
||||||
|
<Compile Include="Indexers\IndexerDefaults.cs" />
|
||||||
<Compile Include="Indexers\IndexerDefinition.cs" />
|
<Compile Include="Indexers\IndexerDefinition.cs" />
|
||||||
<Compile Include="Indexers\IndexerFactory.cs" />
|
<Compile Include="Indexers\IndexerFactory.cs" />
|
||||||
<Compile Include="Indexers\IndexerPageableRequest.cs" />
|
<Compile Include="Indexers\IndexerPageableRequest.cs" />
|
||||||
@ -645,6 +646,7 @@
|
|||||||
<Compile Include="Indexers\IPTorrents\IPTorrentsRequestGenerator.cs" />
|
<Compile Include="Indexers\IPTorrents\IPTorrentsRequestGenerator.cs" />
|
||||||
<Compile Include="Indexers\IPTorrents\IPTorrents.cs" />
|
<Compile Include="Indexers\IPTorrents\IPTorrents.cs" />
|
||||||
<Compile Include="Indexers\IPTorrents\IPTorrentsSettings.cs" />
|
<Compile Include="Indexers\IPTorrents\IPTorrentsSettings.cs" />
|
||||||
|
<Compile Include="Indexers\ITorrentIndexerSettings.cs" />
|
||||||
<Compile Include="Indexers\Newznab\Newznab.cs" />
|
<Compile Include="Indexers\Newznab\Newznab.cs" />
|
||||||
<Compile Include="Indexers\Newznab\NewznabCapabilities.cs" />
|
<Compile Include="Indexers\Newznab\NewznabCapabilities.cs" />
|
||||||
<Compile Include="Indexers\Newznab\NewznabCapabilitiesProvider.cs" />
|
<Compile Include="Indexers\Newznab\NewznabCapabilitiesProvider.cs" />
|
||||||
|
Loading…
Reference in New Issue
Block a user