New: Additional options for HDBits
This commit is contained in:
parent
6ddfd99619
commit
5328fb4ab3
|
@ -12,7 +12,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
public override DownloadProtocol Protocol => DownloadProtocol.Torrent;
|
public override DownloadProtocol Protocol => DownloadProtocol.Torrent;
|
||||||
public override bool SupportsRss => true;
|
public override bool SupportsRss => true;
|
||||||
public override bool SupportsSearch => true;
|
public override bool SupportsSearch => true;
|
||||||
public override int PageSize => 30;
|
public override int PageSize => 100;
|
||||||
|
|
||||||
public HDBits(IHttpClient httpClient, IIndexerStatusService indexerStatusService, IConfigService configService, IParsingService parsingService, Logger logger, ILocalizationService localizationService)
|
public HDBits(IHttpClient httpClient, IIndexerStatusService indexerStatusService, IConfigService configService, IParsingService parsingService, Logger logger, ILocalizationService localizationService)
|
||||||
: base(httpClient, indexerStatusService, configService, parsingService, logger, localizationService)
|
: base(httpClient, indexerStatusService, configService, parsingService, logger, localizationService)
|
||||||
|
@ -21,7 +21,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
|
||||||
public override IIndexerRequestGenerator GetRequestGenerator()
|
public override IIndexerRequestGenerator GetRequestGenerator()
|
||||||
{
|
{
|
||||||
return new HDBitsRequestGenerator() { Settings = Settings };
|
return new HDBitsRequestGenerator { Settings = Settings };
|
||||||
}
|
}
|
||||||
|
|
||||||
public override IParseIndexerResponse GetParser()
|
public override IParseIndexerResponse GetParser()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers.HDBits
|
namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
@ -7,20 +8,16 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
{
|
{
|
||||||
[JsonProperty(Required = Required.Always)]
|
[JsonProperty(Required = Required.Always)]
|
||||||
public string Username { get; set; }
|
public string Username { get; set; }
|
||||||
|
|
||||||
[JsonProperty(Required = Required.Always)]
|
[JsonProperty(Required = Required.Always)]
|
||||||
public string Passkey { get; set; }
|
public string Passkey { get; set; }
|
||||||
|
|
||||||
public string Hash { get; set; }
|
public string Hash { get; set; }
|
||||||
|
|
||||||
public string Search { get; set; }
|
public string Search { get; set; }
|
||||||
|
public IEnumerable<int> Category { get; set; }
|
||||||
public int[] Category { get; set; }
|
public IEnumerable<int> Codec { get; set; }
|
||||||
|
public IEnumerable<int> Medium { get; set; }
|
||||||
public int[] Codec { get; set; }
|
public int? Origin { get; set; }
|
||||||
|
|
||||||
public int[] Medium { get; set; }
|
|
||||||
|
|
||||||
public int[] Origin { get; set; }
|
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "imdb")]
|
[JsonProperty(PropertyName = "imdb")]
|
||||||
public ImdbInfo ImdbInfo { get; set; }
|
public ImdbInfo ImdbInfo { get; set; }
|
||||||
|
@ -33,6 +30,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
|
||||||
[JsonProperty(PropertyName = "snatched_only")]
|
[JsonProperty(PropertyName = "snatched_only")]
|
||||||
public bool? SnatchedOnly { get; set; }
|
public bool? SnatchedOnly { get; set; }
|
||||||
|
|
||||||
public int? Limit { get; set; }
|
public int? Limit { get; set; }
|
||||||
public int? Page { get; set; }
|
public int? Page { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -38,8 +38,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
jsonResponse.Message ?? string.Empty);
|
jsonResponse.Message ?? string.Empty);
|
||||||
}
|
}
|
||||||
|
|
||||||
var responseData = jsonResponse.Data as JArray;
|
if (jsonResponse.Data is not JArray responseData)
|
||||||
if (responseData == null)
|
|
||||||
{
|
{
|
||||||
throw new IndexerException(indexerResponse,
|
throw new IndexerException(indexerResponse,
|
||||||
"Indexer API call response missing result data");
|
"Indexer API call response missing result data");
|
||||||
|
@ -50,9 +49,9 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
foreach (var result in queryResults)
|
foreach (var result in queryResults)
|
||||||
{
|
{
|
||||||
var id = result.Id;
|
var id = result.Id;
|
||||||
torrentInfos.Add(new TorrentInfo()
|
torrentInfos.Add(new TorrentInfo
|
||||||
{
|
{
|
||||||
Guid = string.Format("HDBits-{0}", id),
|
Guid = $"HDBits-{id}",
|
||||||
Title = result.Name,
|
Title = result.Name,
|
||||||
Size = result.Size,
|
Size = result.Size,
|
||||||
InfoHash = result.Hash,
|
InfoHash = result.Hash,
|
||||||
|
|
|
@ -72,7 +72,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
|
||||||
if (TryAddSearchParameters(query, searchCriteria))
|
if (TryAddSearchParameters(query, searchCriteria))
|
||||||
{
|
{
|
||||||
query.Search = string.Format("{0:yyyy}-{0:MM}-{0:dd}", searchCriteria.AirDate);
|
query.Search = searchCriteria.AirDate.ToString("yyyy-MM-dd");
|
||||||
|
|
||||||
pageableRequests.Add(GetRequest(query));
|
pageableRequests.Add(GetRequest(query));
|
||||||
}
|
}
|
||||||
|
@ -87,7 +87,7 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
|
||||||
if (TryAddSearchParameters(query, searchCriteria))
|
if (TryAddSearchParameters(query, searchCriteria))
|
||||||
{
|
{
|
||||||
query.Search = string.Format("{0}-", searchCriteria.Year);
|
query.Search = $"{searchCriteria.Year}-";
|
||||||
|
|
||||||
pageableRequests.Add(GetRequest(query));
|
pageableRequests.Add(GetRequest(query));
|
||||||
}
|
}
|
||||||
|
@ -140,8 +140,9 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
{
|
{
|
||||||
if (searchCriteria.Series.TvdbId != 0)
|
if (searchCriteria.Series.TvdbId != 0)
|
||||||
{
|
{
|
||||||
query.TvdbInfo = query.TvdbInfo ?? new TvdbInfo();
|
query.TvdbInfo ??= new TvdbInfo();
|
||||||
query.TvdbInfo.Id = searchCriteria.Series.TvdbId;
|
query.TvdbInfo.Id = searchCriteria.Series.TvdbId;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -162,6 +163,12 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
query.Username = Settings.Username;
|
query.Username = Settings.Username;
|
||||||
query.Passkey = Settings.ApiKey;
|
query.Passkey = Settings.ApiKey;
|
||||||
|
|
||||||
|
query.Category = Settings.Categories.ToArray();
|
||||||
|
query.Codec = Settings.Codecs.ToArray();
|
||||||
|
query.Medium = Settings.Mediums.ToArray();
|
||||||
|
|
||||||
|
query.Limit = 100;
|
||||||
|
|
||||||
request.SetContent(query.ToJson());
|
request.SetContent(query.ToJson());
|
||||||
request.ContentSummary = query.ToJson(Formatting.None);
|
request.ContentSummary = query.ToJson(Formatting.None);
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using FluentValidation;
|
using FluentValidation;
|
||||||
using NzbDrone.Core.Annotations;
|
using NzbDrone.Core.Annotations;
|
||||||
using NzbDrone.Core.Validation;
|
using NzbDrone.Core.Validation;
|
||||||
|
@ -17,28 +19,41 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
|
||||||
public class HDBitsSettings : ITorrentIndexerSettings
|
public class HDBitsSettings : ITorrentIndexerSettings
|
||||||
{
|
{
|
||||||
private static readonly HDBitsSettingsValidator Validator = new HDBitsSettingsValidator();
|
private static readonly HDBitsSettingsValidator Validator = new ();
|
||||||
|
|
||||||
public HDBitsSettings()
|
public HDBitsSettings()
|
||||||
{
|
{
|
||||||
BaseUrl = "https://hdbits.org";
|
BaseUrl = "https://hdbits.org";
|
||||||
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
MinimumSeeders = IndexerDefaults.MINIMUM_SEEDERS;
|
||||||
|
|
||||||
|
Categories = new[] { (int)HdBitsCategory.Tv, (int)HdBitsCategory.Documentary };
|
||||||
|
Codecs = Array.Empty<int>();
|
||||||
|
Mediums = Array.Empty<int>();
|
||||||
}
|
}
|
||||||
|
|
||||||
[FieldDefinition(0, Label = "Username", Privacy = PrivacyLevel.UserName)]
|
[FieldDefinition(0, Label = "IndexerSettingsApiUrl", Advanced = true, HelpText = "IndexerSettingsApiUrlHelpText")]
|
||||||
public string Username { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(1, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey)]
|
|
||||||
public string ApiKey { get; set; }
|
|
||||||
|
|
||||||
[FieldDefinition(2, Label = "IndexerSettingsApiUrl", Advanced = true, HelpText = "IndexerSettingsApiUrlHelpText")]
|
|
||||||
public string BaseUrl { get; set; }
|
public string BaseUrl { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(3, Type = FieldType.Number, Label = "IndexerSettingsMinimumSeeders", HelpText = "IndexerSettingsMinimumSeedersHelpText", Advanced = true)]
|
[FieldDefinition(1, Label = "Username", Privacy = PrivacyLevel.UserName)]
|
||||||
|
public string Username { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(2, Label = "ApiKey", Privacy = PrivacyLevel.ApiKey)]
|
||||||
|
public string ApiKey { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(3, Label = "IndexerHDBitsSettingsCategories", Type = FieldType.Select, SelectOptions = typeof(HdBitsCategory), HelpText = "IndexerHDBitsSettingsCategoriesHelpText")]
|
||||||
|
public IEnumerable<int> Categories { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(4, Label = "IndexerHDBitsSettingsCodecs", Type = FieldType.Select, SelectOptions = typeof(HdBitsCodec), Advanced = true, HelpText = "IndexerHDBitsSettingsCodecsHelpText")]
|
||||||
|
public IEnumerable<int> Codecs { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(5, Label = "IndexerHDBitsSettingsMediums", Type = FieldType.Select, SelectOptions = typeof(HdBitsMedium), Advanced = true, HelpText = "IndexerHDBitsSettingsMediumsHelpText")]
|
||||||
|
public IEnumerable<int> Mediums { get; set; }
|
||||||
|
|
||||||
|
[FieldDefinition(6, Type = FieldType.Number, Label = "IndexerSettingsMinimumSeeders", HelpText = "IndexerSettingsMinimumSeedersHelpText", Advanced = true)]
|
||||||
public int MinimumSeeders { get; set; }
|
public int MinimumSeeders { get; set; }
|
||||||
|
|
||||||
[FieldDefinition(4)]
|
[FieldDefinition(7)]
|
||||||
public SeedCriteriaSettings SeedCriteria { get; set; } = new SeedCriteriaSettings();
|
public SeedCriteriaSettings SeedCriteria { get; set; } = new ();
|
||||||
|
|
||||||
public NzbDroneValidationResult Validate()
|
public NzbDroneValidationResult Validate()
|
||||||
{
|
{
|
||||||
|
@ -48,31 +63,49 @@ namespace NzbDrone.Core.Indexers.HDBits
|
||||||
|
|
||||||
public enum HdBitsCategory
|
public enum HdBitsCategory
|
||||||
{
|
{
|
||||||
|
[FieldOption(label: "Movie")]
|
||||||
Movie = 1,
|
Movie = 1,
|
||||||
|
[FieldOption(label: "TV")]
|
||||||
Tv = 2,
|
Tv = 2,
|
||||||
|
[FieldOption(label: "Documentary")]
|
||||||
Documentary = 3,
|
Documentary = 3,
|
||||||
|
[FieldOption(label: "Music")]
|
||||||
Music = 4,
|
Music = 4,
|
||||||
|
[FieldOption(label: "Sport")]
|
||||||
Sport = 5,
|
Sport = 5,
|
||||||
|
[FieldOption(label: "Audio Track")]
|
||||||
Audio = 6,
|
Audio = 6,
|
||||||
|
[FieldOption(label: "XXX")]
|
||||||
Xxx = 7,
|
Xxx = 7,
|
||||||
|
[FieldOption(label: "Misc/Demo")]
|
||||||
MiscDemo = 8
|
MiscDemo = 8
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum HdBitsCodec
|
public enum HdBitsCodec
|
||||||
{
|
{
|
||||||
|
[FieldOption(label: "H.264")]
|
||||||
H264 = 1,
|
H264 = 1,
|
||||||
|
[FieldOption(label: "MPEG-2")]
|
||||||
Mpeg2 = 2,
|
Mpeg2 = 2,
|
||||||
|
[FieldOption(label: "VC-1")]
|
||||||
Vc1 = 3,
|
Vc1 = 3,
|
||||||
|
[FieldOption(label: "XviD")]
|
||||||
Xvid = 4,
|
Xvid = 4,
|
||||||
|
[FieldOption(label: "HEVC")]
|
||||||
Hevc = 5
|
Hevc = 5
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum HdBitsMedium
|
public enum HdBitsMedium
|
||||||
{
|
{
|
||||||
|
[FieldOption(label: "Blu-ray/HD DVD")]
|
||||||
Bluray = 1,
|
Bluray = 1,
|
||||||
|
[FieldOption(label: "Encode")]
|
||||||
Encode = 3,
|
Encode = 3,
|
||||||
|
[FieldOption(label: "Capture")]
|
||||||
Capture = 4,
|
Capture = 4,
|
||||||
|
[FieldOption(label: "Remux")]
|
||||||
Remux = 5,
|
Remux = 5,
|
||||||
|
[FieldOption(label: "WEB-DL")]
|
||||||
WebDl = 6
|
WebDl = 6
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -770,6 +770,12 @@
|
||||||
"Indexer": "Indexer",
|
"Indexer": "Indexer",
|
||||||
"IndexerDownloadClientHealthCheckMessage": "Indexers with invalid download clients: {indexerNames}.",
|
"IndexerDownloadClientHealthCheckMessage": "Indexers with invalid download clients: {indexerNames}.",
|
||||||
"IndexerDownloadClientHelpText": "Specify which download client is used for grabs from this indexer",
|
"IndexerDownloadClientHelpText": "Specify which download client is used for grabs from this indexer",
|
||||||
|
"IndexerHDBitsSettingsCategories": "Categories",
|
||||||
|
"IndexerHDBitsSettingsCategoriesHelpText": "If unspecified, all options are used.",
|
||||||
|
"IndexerHDBitsSettingsCodecs": "Codecs",
|
||||||
|
"IndexerHDBitsSettingsCodecsHelpText": "If unspecified, all options are used.",
|
||||||
|
"IndexerHDBitsSettingsMediums": "Mediums",
|
||||||
|
"IndexerHDBitsSettingsMediumsHelpText": "If unspecified, all options are used.",
|
||||||
"IndexerIPTorrentsSettingsFeedUrl": "Feed URL",
|
"IndexerIPTorrentsSettingsFeedUrl": "Feed URL",
|
||||||
"IndexerIPTorrentsSettingsFeedUrlHelpText": "The full RSS feed url generated by IPTorrents, using only the categories you selected (HD, SD, x264, etc ...)",
|
"IndexerIPTorrentsSettingsFeedUrlHelpText": "The full RSS feed url generated by IPTorrents, using only the categories you selected (HD, SD, x264, etc ...)",
|
||||||
"IndexerJackettAllHealthCheckMessage": "Indexers using the unsupported Jackett 'all' endpoint: {indexerNames}",
|
"IndexerJackettAllHealthCheckMessage": "Indexers using the unsupported Jackett 'all' endpoint: {indexerNames}",
|
||||||
|
|
Loading…
Reference in New Issue