public virtual IndexerPageableRequestChain GetSearchRequests(SpecialEpisodeSearchCriteria searchCriteria) { var pageableRequests = new IndexerPageableRequestChain(); var parameters = new BroadcastheNetTorrentQuery(); if (AddSeriesSearchParameters(parameters, searchCriteria)) { var episodeQueryTitle = searchCriteria.Episodes.Where(e => !string.IsNullOrWhiteSpace(e.Title)) .Select(e => SearchCriteriaBase.GetCleanSceneTitle(e.Title)) .ToArray(); foreach (var queryTitle in episodeQueryTitle) { parameters = parameters.Clone(); parameters.Category = "Episode"; parameters.Name = "%" + queryTitle + "%"; pageableRequests.Add(GetPagedRequests(MaxPages, parameters)); } } return(pageableRequests); }
private List <DownloadDecision> SearchSpecial(Series series, List <Episode> episodes, bool monitoredOnly, bool userInvokedSearch, bool interactiveSearch) { var downloadDecisions = new List <DownloadDecision>(); var searchSpec = Get <SpecialEpisodeSearchCriteria>(series, episodes, monitoredOnly, userInvokedSearch, interactiveSearch); // build list of queries for each episode in the form: "<series> <episode-title>" searchSpec.EpisodeQueryTitles = episodes.Where(e => !string.IsNullOrWhiteSpace(e.Title)) .SelectMany(e => searchSpec.CleanSceneTitles.Select(title => title + " " + SearchCriteriaBase.GetCleanSceneTitle(e.Title))) .ToArray(); downloadDecisions.AddRange(Dispatch(indexer => indexer.Fetch(searchSpec), searchSpec)); // Search for each episode by season/episode number as well foreach (var episode in episodes) { // Episode needs to be monitored if it's not an interactive search if (!interactiveSearch && monitoredOnly && !episode.Monitored) { continue; } downloadDecisions.AddRange(SearchSingle(series, episode, monitoredOnly, userInvokedSearch, interactiveSearch)); } return(DeDupeDecisions(downloadDecisions)); }