diff --git a/src/Jackett.Common/Indexers/Definitions/BroadcasTheNet.cs b/src/Jackett.Common/Indexers/Definitions/BroadcasTheNet.cs index 2c7723841..a59786ec6 100644 --- a/src/Jackett.Common/Indexers/Definitions/BroadcasTheNet.cs +++ b/src/Jackett.Common/Indexers/Definitions/BroadcasTheNet.cs @@ -168,7 +168,7 @@ namespace Jackett.Common.Indexers.Definitions else if (DateTime.TryParseExact($"{query.Season} {query.Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate)) { // Daily Episode - parameters.Name = showDate.ToString("yyyy.MM.dd"); + parameters.Name = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture); parameters.Category = "Episode"; pageableRequests.Add(GetPagedRequests(parameters, btnResults, btnOffset)); } diff --git a/src/Jackett.Common/Indexers/Definitions/NebulanceAPI.cs b/src/Jackett.Common/Indexers/Definitions/NebulanceAPI.cs index 86fe80317..73556aa5f 100644 --- a/src/Jackett.Common/Indexers/Definitions/NebulanceAPI.cs +++ b/src/Jackett.Common/Indexers/Definitions/NebulanceAPI.cs @@ -95,7 +95,7 @@ namespace Jackett.Common.Indexers.Definitions public override IIndexerRequestGenerator GetRequestGenerator() { - return new NebulanceAPIRequestGenerator(TorznabCaps, configData, SiteLink); + return new NebulanceAPIRequestGenerator(TorznabCaps, configData, SiteLink, logger); } public override IParseIndexerResponse GetParser() @@ -140,12 +140,14 @@ namespace Jackett.Common.Indexers.Definitions private readonly TorznabCapabilities _torznabCaps; private readonly ConfigurationDataAPIKey _configData; private readonly string _siteLink; + private readonly Logger _logger; - public NebulanceAPIRequestGenerator(TorznabCapabilities torznabCaps, ConfigurationDataAPIKey configData, string siteLink) + public NebulanceAPIRequestGenerator(TorznabCapabilities torznabCaps, ConfigurationDataAPIKey configData, string siteLink, Logger logger) { _torznabCaps = torznabCaps; _configData = configData; _siteLink = siteLink; + _logger = logger; } public IndexerPageableRequestChain GetSearchRequests(TorznabQuery query) @@ -183,9 +185,9 @@ namespace Jackett.Common.Indexers.Definitions } else { - if (query.Season > 0) + if (query.Season.HasValue) { - queryParams.Season = query.Season; + queryParams.Season = query.Season.Value; } if (query.Episode.IsNotNullOrWhiteSpace() && int.TryParse(query.Episode, out var episodeNumber)) @@ -194,6 +196,16 @@ namespace Jackett.Common.Indexers.Definitions } } + if ((queryParams.Season.HasValue || queryParams.Episode.HasValue) && + queryParams.Name.IsNullOrWhiteSpace() && + queryParams.Release.IsNullOrWhiteSpace() && + !queryParams.TvMaze.HasValue) + { + _logger.Debug("NBL API does not support season calls without name, series, id, imdb, tvmaze, or time keys."); + + return new IndexerPageableRequestChain(); + } + pageableRequests.Add(GetPagedRequests(queryParams, limit, offset)); return pageableRequests; diff --git a/src/Jackett.Common/Indexers/Definitions/Wolfmax4K.cs b/src/Jackett.Common/Indexers/Definitions/Wolfmax4K.cs index a022ce89c..aa1213c82 100644 --- a/src/Jackett.Common/Indexers/Definitions/Wolfmax4K.cs +++ b/src/Jackett.Common/Indexers/Definitions/Wolfmax4K.cs @@ -288,7 +288,7 @@ namespace Jackett.Common.Indexers.Definitions } // Filter by Season - if (query.Season != 0 && !releaseInfo.Title.Contains("S" + query.Season.ToString("D2"))) + if (query.Season.HasValue && !releaseInfo.Title.Contains("S" + query.Season.Value.ToString("D2"))) { return null; } diff --git a/src/Jackett.Common/Models/TorznabQuery.cs b/src/Jackett.Common/Models/TorznabQuery.cs index aed9007b8..10c692fb7 100644 --- a/src/Jackett.Common/Models/TorznabQuery.cs +++ b/src/Jackett.Common/Models/TorznabQuery.cs @@ -31,7 +31,7 @@ namespace Jackett.Common.Models [JsonIgnore] public bool Cache { get; set; } = true; - public int Season { get; set; } + public int? Season { get; set; } public string Episode { get; set; } public string SearchTerm { get; set; } @@ -227,7 +227,9 @@ namespace Jackett.Common.Models if (limit != null && limit > 0) { if (limit > queryString.Length) + { limit = queryString.Length; + } queryString = queryString.Substring(0, (int)limit); } @@ -243,14 +245,20 @@ namespace Jackett.Common.Models public string GetEpisodeSearchString() { - if (Season == 0) + if (Season == null || Season == 0) + { return string.Empty; + } string episodeString; if (DateTime.TryParseExact($"{Season} {Episode}", "yyyy MM/dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out var showDate)) - episodeString = showDate.ToString("yyyy.MM.dd"); - else if (string.IsNullOrEmpty(Episode)) + { + episodeString = showDate.ToString("yyyy.MM.dd", CultureInfo.InvariantCulture); + } + else if (Episode.IsNullOrWhiteSpace()) + { episodeString = $"S{Season:00}"; + } else { try @@ -261,8 +269,8 @@ namespace Jackett.Common.Models { episodeString = $"S{Season:00}E{Episode}"; } - } + return episodeString; } }