Example #1
0
        public void Setup()
        {
            _series = Builder <Series> .CreateNew()
                      .With(s => s.Title      = "30 Rock")
                      .With(s => s.CleanTitle = "rock")
                      .Build();

            _episodes = Builder <Episode> .CreateListOfSize(1)
                        .All()
                        .With(e => e.AirDate = DateTime.Today.ToString(Episode.AIR_DATE_FORMAT))
                        .Build()
                        .ToList();

            _parsedEpisodeInfo = new ParsedEpisodeInfo
            {
                SeriesTitle     = _series.Title,
                SeriesTitleInfo = new SeriesTitleInfo(),
                SeasonNumber    = 1,
                EpisodeNumbers  = new[] { 1 }
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series        = _series,
                EpisodeNumber = _episodes.First().EpisodeNumber,
                SeasonNumber  = _episodes.First().SeasonNumber,
                Episodes      = _episodes
            };

            Mocker.GetMock <ISceneMappingService>()
            .Setup(v => v.GetTvdbSeasonNumber(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <int>()))
            .Returns <string, string, int>((s, r, i) => i);
        }
Example #2
0
        public void Setup()
        {
            _series = Builder <Series> .CreateNew()
                      .With(s => s.Title      = "30 Stone")
                      .With(s => s.CleanTitle = "stone")
                      .Build();

            _episodes = Builder <Episode> .CreateListOfSize(1)
                        .All()
                        .With(e => e.AirDate = DateTime.Today.ToString(Episode.AIR_DATE_FORMAT))
                        .Build()
                        .ToList();

            _parsedEpisodeInfo = new ParsedEpisodeInfo
            {
                SeriesTitle            = _series.Title,
                SeasonNumber           = 1,
                EpisodeNumbers         = new[] { 1 },
                AbsoluteEpisodeNumbers = new int[0]
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series        = _series,
                EpisodeNumber = _episodes.First().EpisodeNumber,
                SeasonNumber  = _episodes.First().SeasonNumber,
                Episodes      = _episodes
            };

            Mocker.GetMock <ISeriesService>()
            .Setup(s => s.FindByTitle(It.IsAny <string>()))
            .Returns(_series);
        }
Example #3
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                        string.Format("&season={0}&ep={1}",
                                                      searchCriteria.SeasonNumber,
                                                      searchCriteria.EpisodeNumber));
            }

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}&ep={1}",
                                                       searchCriteria.SeasonNumber,
                                                       searchCriteria.EpisodeNumber));
            }

            pageableRequests.AddTier();

            if (searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}&ep={1}",
                                                       searchCriteria.SeasonNumber,
                                                       searchCriteria.EpisodeNumber));
            }

            return(pageableRequests);
        }
        private Decision IsSatisfiedBy(RemoteEpisode remoteEpisode, SingleEpisodeSearchCriteria singleEpisodeSpec)
        {
            var seasonNumber = _sceneMappingService.GetTvdbSeasonNumber(remoteEpisode.ParsedEpisodeInfo.SeriesTitle,
                                                                        remoteEpisode.ParsedEpisodeInfo.ReleaseTitle,
                                                                        remoteEpisode.ParsedEpisodeInfo.SeasonNumber);

            if (singleEpisodeSpec.SeasonNumber != seasonNumber)
            {
                _logger.Debug("Season number does not match searched season number, skipping.");
                return(Decision.Reject("Wrong season"));
            }

            if (!remoteEpisode.ParsedEpisodeInfo.EpisodeNumbers.Any())
            {
                _logger.Debug("Full season result during single episode search, skipping.");
                return(Decision.Reject("Full season pack"));
            }

            if (!remoteEpisode.ParsedEpisodeInfo.EpisodeNumbers.Contains(singleEpisodeSpec.EpisodeNumber))
            {
                _logger.Debug("Episode number does not match searched episode number, skipping.");
                return(Decision.Reject("Wrong episode"));
            }

            return(Decision.Accept());
        }
Example #5
0
        public void Setup()
        {
            _series = Builder <Series> .CreateNew()
                      .With(s => s.Title      = "30 Rock")
                      .With(s => s.CleanTitle = "rock")
                      .Build();

            _episodes = Builder <Episode> .CreateListOfSize(1)
                        .All()
                        .With(e => e.AirDate = DateTime.Today.ToString(Episode.AIR_DATE_FORMAT))
                        .Build()
                        .ToList();

            _parsedEpisodeInfo = new ParsedEpisodeInfo
            {
                SeriesTitle     = _series.Title,
                SeriesTitleInfo = new SeriesTitleInfo(),
                SeasonNumber    = 1,
                EpisodeNumbers  = new[] { 1 }
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series        = _series,
                EpisodeNumber = _episodes.First().EpisodeNumber,
                SeasonNumber  = _episodes.First().SeasonNumber,
                Episodes      = _episodes
            };
        }
Example #6
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            if (searchCriteria.Series.TvRageId > 0)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
                                                               String.Format("&rid={0}&season={1}&ep={2}",
                                                                             searchCriteria.Series.TvRageId,
                                                                             searchCriteria.SeasonNumber,
                                                                             searchCriteria.EpisodeNumber)));
            }
            else
            {
                foreach (var queryTitle in searchCriteria.QueryTitles)
                {
                    pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, Settings.Categories, "tvsearch",
                                                                   String.Format("&q={0}&season={1}&ep={2}",
                                                                                 NewsnabifyTitle(queryTitle),
                                                                                 searchCriteria.SeasonNumber,
                                                                                 searchCriteria.EpisodeNumber)));
                }
            }

            return(pageableRequests);
        }
Example #7
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var parameters = new BroadcastheNetTorrentQuery();

            if (AddSeriesSearchParameters(parameters, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    parameters = parameters.Clone();

                    parameters.Category = "Episode";
                    parameters.Name     = string.Format("S{0:00}E{1:00}", episode.SeasonNumber, episode.EpisodeNumber);

                    pageableRequests.Add(GetPagedRequests(MaxPages, parameters));
                }

                foreach (var seasonNumber in searchCriteria.Episodes.Select(v => v.SeasonNumber).Distinct())
                {
                    parameters = parameters.Clone();

                    parameters.Category = "Season";
                    parameters.Name     = string.Format("Season {0}", seasonNumber);

                    pageableRequests.Add(GetPagedRequests(MaxPages, parameters));
                }
            }

            return(pageableRequests);
        }
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests("search", searchCriteria.Series.TvdbId, "S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber));

            return(pageableRequests);
        }
Example #9
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            pageableRequests.AddIfNotNull(GetPagedRequests("search", searchCriteria.Series.TvdbId, "S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber));

            return(pageableRequests);
        }
Example #10
0
        public override IList <ReleaseInfo> Fetch(SingleEpisodeSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(new List <ReleaseInfo>());
            }

            return(FetchReleases(g => g.GetSearchRequests(searchCriteria)));
        }
Example #11
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            AddTvIdPageableRequests(pageableRequests, MaxPages, Settings.Categories, searchCriteria,
                                    string.Format("&season={0}&ep={1}",
                                                  searchCriteria.SeasonNumber,
                                                  searchCriteria.EpisodeNumber));

            return(pageableRequests);
        }
Example #12
0
        public IList <ReleaseInfo> Fetch(IIndexer indexer, SingleEpisodeSearchCriteria searchCriteria)
        {
            _logger.Debug("Searching for {0}", searchCriteria);

            var searchUrls = indexer.GetEpisodeSearchUrls(searchCriteria.QueryTitle, searchCriteria.Series.TvRageId, searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber);
            var result     = Fetch(indexer, searchUrls);

            _logger.Info("Finished searching {0} for {1}. Found {2}", indexer, searchCriteria, result.Count);

            return(result);
        }
Example #13
0
        public override IList <ReleaseInfo> Fetch(SingleEpisodeSearchCriteria searchCriteria)
        {
            if (!SupportsSearch)
            {
                return(new List <ReleaseInfo>());
            }

            var generator = GetRequestGenerator();

            return(FetchReleases(generator.GetSearchRequests(searchCriteria)));
        }
        public IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            AddImdbRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}&episode={searchCriteria.EpisodeNumber}");

            pageableRequests.AddTier();

            AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}&episode={searchCriteria.EpisodeNumber}");

            return(pageableRequests);
        }
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            pageableRequests.Add(GetPagedRequests(MaxPages,
                                                  series_id: searchCriteria.Series.TvdbId,
                                                  episode: string.Format("S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber)));

            pageableRequests.Add(GetPagedRequests(MaxPages,
                                                  series_id: searchCriteria.Series.TvdbId,
                                                  season: string.Format("Season {0:00}", searchCriteria.SeasonNumber)));

            return(pageableRequests);
        }
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.Add(GetPagedRequests(string.Format("{0}+S{1:00}E{2:00}",
                                                                    queryTitle,
                                                                    searchCriteria.SeasonNumber,
                                                                    searchCriteria.EpisodeNumber)));
            }

            return(pageableRequests);
        }
Example #17
0
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(String.Format("/search/index.php?show_name={0}&season={1}&episode={2}&mode=rss",
                                                                             queryTitle,
                                                                             searchCriteria.SeasonNumber,
                                                                             searchCriteria.EpisodeNumber)));
            }

            return(pageableRequests);
        }
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(String.Format("{0}+S{1:00}E{2:00}",
                                                                             queryTitle,
                                                                             searchCriteria.SeasonNumber,
                                                                             searchCriteria.EpisodeNumber)));
            }

            return(pageableRequests);
        }
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequest = new List <IEnumerable <IndexerRequest> >();

            var parameters = new BroadcastheNetTorrentQuery();

            if (AddSeriesSearchParameters(parameters, searchCriteria))
            {
                parameters.Category = "Episode";
                parameters.Name     = String.Format("S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber);

                pageableRequest.AddIfNotNull(GetPagedRequests(MaxPages, parameters));
            }

            return(pageableRequest);
        }
Example #20
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.Add(GetPagedRequests(MaxPages, "usearch",
                                                      PrepareQuery(queryTitle),
                                                      "category:tv",
                                                      string.Format("season:{0}", searchCriteria.SeasonNumber),
                                                      string.Format("episode:{0}", searchCriteria.EpisodeNumber)));

                pageableRequests.Add(GetPagedRequests(MaxPages, "usearch",
                                                      PrepareQuery(queryTitle),
                                                      string.Format("S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber),
                                                      "category:tv"));
            }

            return(pageableRequests);
        }
        public virtual IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new List <IEnumerable <IndexerRequest> >();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, "usearch",
                                                               PrepareQuery(queryTitle),
                                                               "category:tv",
                                                               String.Format("season:{0}", searchCriteria.SeasonNumber),
                                                               String.Format("episode:{0}", searchCriteria.EpisodeNumber)));

                pageableRequests.AddIfNotNull(GetPagedRequests(MaxPages, "usearch",
                                                               PrepareQuery(queryTitle),
                                                               String.Format("S{0:00}E{1:00}", searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber),
                                                               "category:tv"));
            }

            return(pageableRequests);
        }
Example #22
0
        public IList <IEnumerable <IndexerRequest> > GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var requests = new List <IEnumerable <IndexerRequest> >();

            var queryBase = new TorrentQuery();

            if (TryAddSearchParameters(queryBase, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    var query = queryBase.Clone();

                    query.TvdbInfo.Season  = episode.SeasonNumber;
                    query.TvdbInfo.Episode = episode.EpisodeNumber;

                    requests.Add(GetRequest(query));
                }
            }

            return(requests);
        }
Example #23
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            var queryBase = new TorrentQuery();

            if (TryAddSearchParameters(queryBase, searchCriteria))
            {
                foreach (var episode in searchCriteria.Episodes)
                {
                    var query = queryBase.Clone();

                    query.TvdbInfo.Season  = episode.SeasonNumber;
                    query.TvdbInfo.Episode = episode.EpisodeNumber;

                    pageableRequests.Add(GetRequest(query));
                }
            }

            return(pageableRequests);
        }
Example #24
0
        public void SetUp()
        {
            UseRealHttp();

            _singleSearchCriteria = new SingleEpisodeSearchCriteria()
            {
                SceneTitles = new List <string> {
                    "Person of Interest"
                },
                SeasonNumber  = 1,
                EpisodeNumber = 1
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <string> {
                    "Steins;Gate"
                },
                AbsoluteEpisodeNumber = 1
            };
        }
        public void SetUp()
        {
            Subject.Settings = new NewznabSettings()
            {
                BaseUrl         = "http://127.0.0.1:1234/",
                Categories      = new [] { 1, 2 },
                AnimeCategories = new [] { 3, 4 },
                ApiKey          = "abcd",
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series = new Tv.Series {
                    TvRageId = 10, TvdbId = 20, TvMazeId = 30, ImdbId = "t40"
                },
                SceneTitles = new List <string> {
                    "Monkey Island"
                },
                SeasonNumber  = 1,
                EpisodeNumber = 2
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <string>()
                {
                    "Monkey+Island"
                },
                AbsoluteEpisodeNumber = 100,
                SeasonNumber          = 5,
                EpisodeNumber         = 4
            };

            _capabilities = new NewznabCapabilities();

            Mocker.GetMock <INewznabCapabilitiesProvider>()
            .Setup(v => v.GetCapabilities(It.IsAny <NewznabSettings>()))
            .Returns(_capabilities);
        }
        public void SetUp()
        {
            Subject.Settings = new TorznabSettings()
            {
                Url                = "http://127.0.0.1:1234/",
                Categories         = new [] { 1, 2 },
                AnimeCategories    = new [] { 3, 4 },
                ApiKey             = "abcd",
                EnableRageIDLookup = true
            };

            _singleEpisodeSearchCriteria = new SingleEpisodeSearchCriteria
            {
                Series = new Tv.Series {
                    TvRageId = 10
                },
                SceneTitles = new List <string> {
                    "Monkey Island"
                },
                SeasonNumber  = 1,
                EpisodeNumber = 2
            };

            _animeSearchCriteria = new AnimeEpisodeSearchCriteria()
            {
                SceneTitles = new List <String>()
                {
                    "Monkey+Island"
                },
                AbsoluteEpisodeNumber = 100
            };

            _capabilities = new TorznabCapabilities();

            Mocker.GetMock <ITorznabCapabilitiesProvider>()
            .Setup(v => v.GetCapabilities(It.IsAny <TorznabSettings>()))
            .Returns(_capabilities);
        }
        public IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
            {
                AddImdbRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}&episode={searchCriteria.EpisodeNumber}");
            }

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
            {
                AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}&episode={searchCriteria.EpisodeNumber}");
            }

            pageableRequests.AddTier();

            if (searchCriteria.SearchMode == SearchMode.Default)
            {
                AddNameRequests(pageableRequests, searchCriteria, "search-torrents", Settings.Categories, $"&season={searchCriteria.SeasonNumber}&episode={searchCriteria.EpisodeNumber}");
            }

            return(pageableRequests);
        }
Example #28
0
        public virtual IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            if (!SupportsTvdbSearch && !SupportsTvSearch && !SupportsTvTitleSearch)
            {
                _logger.Debug("Indexer capabilities lacking season & ep query parameters, no Standard series search possible.");
            }

            var pageableRequests = new IndexerPageableRequestChain();

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchID) || searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTvIdPageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                        string.Format("&season={0}&ep={1}",
                                                      NewznabifySeasonNumber(searchCriteria.SeasonNumber),
                                                      searchCriteria.EpisodeNumber));
            }

            if (searchCriteria.SearchMode.HasFlag(SearchMode.SearchTitle))
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}&ep={1}",
                                                       NewznabifySeasonNumber(searchCriteria.SeasonNumber),
                                                       searchCriteria.EpisodeNumber));
            }

            pageableRequests.AddTier();

            if (searchCriteria.SearchMode == SearchMode.Default)
            {
                AddTitlePageableRequests(pageableRequests, Settings.Categories, searchCriteria,
                                         string.Format("&season={0}&ep={1}",
                                                       NewznabifySeasonNumber(searchCriteria.SeasonNumber),
                                                       searchCriteria.EpisodeNumber));
            }

            return(pageableRequests);
        }
Example #29
0
        public IndexerPageableRequestChain GetSearchRequests(SingleEpisodeSearchCriteria searchCriteria)
        {
            var pageableRequests = new IndexerPageableRequestChain();

            foreach (var queryTitle in searchCriteria.QueryTitles)
            {
                var indexerRequests = new List <IndexerRequest>();

                var url = string.Format(BaseSearchUrl,
                                        string.Format("{0}+S{1:00}E{2:00}", queryTitle, searchCriteria.SeasonNumber,
                                                      searchCriteria.EpisodeNumber));

                var requestBuilder = new HttpRequestBuilder(true, url, 443)
                {
                    NetworkCredential = new NetworkCredential(Settings.Username, Settings.Password)
                };

                var httpRequest = requestBuilder.Build();
                indexerRequests.Add(new IndexerRequest(httpRequest));
                pageableRequests.AddTier(indexerRequests);
            }

            return(pageableRequests);
        }
Example #30
0
        public IList <ReleaseInfo> Fetch(IIndexer indexer, SingleEpisodeSearchCriteria searchCriteria)
        {
            var searchUrls = indexer.GetEpisodeSearchUrls(searchCriteria.QueryTitles, searchCriteria.Series.TvRageId, searchCriteria.SeasonNumber, searchCriteria.EpisodeNumber).ToList();

            return(Fetch(indexer, searchUrls, searchCriteria));
        }