From 6739d14c8599ce2cf1a872d98a68cb8260c6493e Mon Sep 17 00:00:00 2001 From: Leandro Battochio Date: Tue, 7 Apr 2026 00:49:08 -0300 Subject: [PATCH] Fix season parsing --- .../Indexers/Definitions/BjShare.cs | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/NzbDrone.Core/Indexers/Definitions/BjShare.cs b/src/NzbDrone.Core/Indexers/Definitions/BjShare.cs index 6a30db5e4..e25b64be9 100644 --- a/src/NzbDrone.Core/Indexers/Definitions/BjShare.cs +++ b/src/NzbDrone.Core/Indexers/Definitions/BjShare.cs @@ -179,10 +179,34 @@ private IndexerPageableRequestChain BuildSearch(SearchCriteriaBase searchCriteri var parameters = new NameValueCollection(); var query = searchCriteria.SearchTerm?.Trim() ?? string.Empty; + int? seasonFromQuery = null; - if (searchCriteria is TvSearchCriteria) + var seasonMatch = Regex.Match(query, @"\{season:\s*(\d+)\}", RegexOptions.IgnoreCase); + if (seasonMatch.Success) + { + seasonFromQuery = int.Parse(seasonMatch.Groups[1].Value, CultureInfo.InvariantCulture); + query = Regex.Replace(query, @"\{season:\s*\d+\}", "", RegexOptions.IgnoreCase).Trim(); + } + + var episodeMatch = Regex.Match(query, @"\{episode:\s*(\d+)\}", RegexOptions.IgnoreCase); + if (episodeMatch.Success) + { + query = Regex.Replace(query, @"\{episode:\s*\d+\}", "", RegexOptions.IgnoreCase).Trim(); + } + + if (searchCriteria is TvSearchCriteria tv) { query = Regex.Replace(query, @"(S\d+E\d+|S\d+)", "", RegexOptions.IgnoreCase).Trim(); + + var season = tv.Season ?? seasonFromQuery; + if (season.HasValue) + { + query = $"{query} S{season.Value:00}"; + } + } + else if (seasonFromQuery.HasValue) + { + query = $"{query} S{seasonFromQuery.Value:00}"; } parameters.Set("searchstr", query);