protected override async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, new List <int> { TorznabCatType.TV.ID }); var releases = new List <ReleaseInfo>(); var searchQuery = query.GetQueryString(); searchQuery = searchQuery.Replace("Marvels", "Marvel"); // strip 's for better results var searchQuerySingleEpisodes = Regex.Replace(searchQuery, @"(S\d{2})$", "$1*"); // If we're just seaching for a season (no episode) append an * to include all episodes of that season. await GetReleases(releases, query, searchQuerySingleEpisodes); // Always search for torrent groups (complete seasons) too var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}([Ee]{1}\d{2,3})?$").Match(searchQuery); if (seasonMatch.Success) { var newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}([Ee]{1}\d{2,3})?", $"Season {query.Season}"); await GetReleases(releases, query, newSearchQuery); } return(releases); }
public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, new List <int> { TorznabCatType.TV.ID }); var releases = new List <ReleaseInfo>(); var searchQuery = query.GetQueryString(); var searchQuerySingleEpisodes = Regex.Replace(searchQuery, @"(S\d{2})$", "$1*"); // If we're just seaching for a season (no episode) append an * to include all episodes of that season. await GetReleases(releases, query, searchQuerySingleEpisodes); // Search for torrent groups if (isTv) { var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}").Match(query.GetQueryString()); if (seasonMatch.Success) { var newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}", $"Season {query.Season}"); await GetReleases(releases, query, newSearchQuery); } } return(releases); }
public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query) { var isTv = TorznabCatType.QueryContainsParentCategory(query.Categories, TorznabCatType.TV.ID); var releases = new List <ReleaseInfo>(); var searchQuery = query.GetQueryString(); await GetReleases(releases, query, searchQuery); // Search for torrent groups if (isTv) { var seasonMatch = new Regex(@".*\s[Ss]{1}\d{2}").Match(query.GetQueryString()); if (seasonMatch.Success) { var newSearchQuery = Regex.Replace(searchQuery, @"[Ss]{1}\d{2}", $"Season {query.Season}"); await GetReleases(releases, query, newSearchQuery); } } return(releases); }
protected virtual IEnumerable <ReleaseInfo> FilterResults(TorznabQuery query, IEnumerable <ReleaseInfo> results) { if (query.Categories.Length == 0) { return(results); } var filteredResults = results.Where(result => { return(result.Category.IsEmptyOrNull() || query.Categories.Intersect(result.Category).Any() || TorznabCatType.QueryContainsParentCategory(query.Categories, result.Category)); }); return(filteredResults); }
public virtual IEnumerable <ReleaseInfo> FilterResults(TorznabQuery query, IEnumerable <ReleaseInfo> results) { foreach (var result in results) { if (query.Categories.Length == 0 || result.Category == null || result.Category.Count() == 0 || query.Categories.Intersect(result.Category).Any() || TorznabCatType.QueryContainsParentCategory(query.Categories, result.Category)) { yield return(result); } } }