Exemplo n.º 1
0
            public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
            {
                query = SanitizeQuery(query);
                var uriSearch  = CreateSearchUri(query.SearchTerm);
                var htmlSearch = await requester.MakeRequest(uriSearch);

                var moviesInfoUris = movieSearchScraper.Extract(htmlSearch);
                var infoHtmlTasks  = moviesInfoUris.Select(async u => await requester.MakeRequest(u));
                var infoHtmls      = await Task.WhenAll(infoHtmlTasks);

                var movies = infoHtmls.Select(h => movieInfoScraper.Extract(h));

                var tasks = movies.Select(async m =>
                {
                    var html = await requester.MakeRequest(m.Link);
                    return(new KeyValuePair <MTReleaseInfo, IHtmlDocument>(m, html));
                });
                var moviesWithHtml = await Task.WhenAll(tasks.ToArray());

                movies = moviesWithHtml.Select(movieWithHtml =>
                {
                    var movie  = movieWithHtml.Key;
                    var html   = movieWithHtml.Value;
                    movie.Link = movieDownloadScraper.Extract(html);
                    movie.Guid = movieWithHtml.Key.Link;
                    return(movie);
                });

                if (query.Year != null)
                {
                    movies = movies.Where(m => m.Year == query.Year);
                }

                return(movies);
            }
Exemplo n.º 2
0
            private async Task <List <MTReleaseInfo> > GetEpisodes(TorznabQuery query, IEnumerable <Season> seasons)
            {
                var episodesHtmlTasks = new Dictionary <Season, Task <IHtmlDocument> >();

                seasons.ToList().ForEach(season =>
                {
                    episodesHtmlTasks.Add(season, requester.MakeRequest(new Uri(WebUri, season.Link)));
                });
                var episodesHtml = await Task.WhenAll(episodesHtmlTasks.Values);

                var episodes = episodesHtmlTasks.SelectMany(seasonAndHtml =>
                {
                    var season = seasonAndHtml.Key;
                    var html   = seasonAndHtml.Value.Result;
                    var eps    = seasonScraper.Extract(html);
                    return(eps.ToList().Select(e =>
                    {
                        e.CategoryText = season.Type;
                        return e;
                    }));
                });

                if (!string.IsNullOrEmpty(query.Episode))
                {
                    var episodeNumber = Int32.Parse(query.Episode);
                    episodes = episodes.Where(e => e.EpisodeNumber <= episodeNumber && episodeNumber <= e.FinalEpisodeNumber);
                }
                return(episodes.ToList());
            }
Exemplo n.º 3
0
            private async Task AddMejorTorrentIDs(MTReleaseInfo episode, Uri seasonUri)
            {
                var html = await requester.MakeRequest(seasonUri);

                var newEpisodes = seasonScraper.Extract(html);

                // GET BY EPISODE NUMBER
                newEpisodes = newEpisodes.Where(e => e.EpisodeNumber == episode.EpisodeNumber);
                if (newEpisodes.Count() == 0)
                {
                    throw new Exception("Imposible to detect episode ID in RSS");
                }
                episode.MejorTorrentID = newEpisodes.First().MejorTorrentID;
            }
Exemplo n.º 4
0
            public async Task AddDownloadLinks(IEnumerable <MTReleaseInfo> episodes)
            {
                var downloadRequester = new MejorTorrentDownloadRequesterDecorator(requester);
                var downloadHtml      = await downloadRequester.MakeRequest(episodes.Select(e => e.MejorTorrentID));

                var downloads = downloadScraper.Extract(downloadHtml).ToList();

                for (var i = 0; i < downloads.Count; i++)
                {
                    var e = episodes.ElementAt(i);
                    episodes.ElementAt(i).Link = downloads.ElementAt(i);
                    episodes.ElementAt(i).Guid = downloads.ElementAt(i);
                }
            }
Exemplo n.º 5
0
            private async Task <List <Season> > GetSeasons(TorznabQuery query)
            {
                var seasonHtml = await requester.MakeRequest(CreateSearchUri(query.SanitizedSearchTerm));

                var seasons = tvShowScraper.Extract(seasonHtml);

                if (query.Season != 0)
                {
                    seasons = seasons.Where(s => s.Number == query.Season);
                }
                if (query.Categories.Count() != 0)
                {
                    seasons = seasons.Where(s => new List <int>(query.Categories).Contains(s.Category.ID));
                }
                return(seasons.ToList());
            }
Exemplo n.º 6
0
            public async Task <IEnumerable <ReleaseInfo> > PerformQuery(TorznabQuery query)
            {
                var html = await requester.MakeRequest(NewTorrentsUri);

                var episodesAndSeasonsUri = rssScraper.Extract(html);

                Task.WaitAll(episodesAndSeasonsUri.ToList().Select(async epAndSeasonUri =>
                {
                    var episode   = epAndSeasonUri.Key;
                    var seasonUri = epAndSeasonUri.Value;
                    await AddMejorTorrentIDs(episode, seasonUri);
                }).ToArray());

                var episodes = episodesAndSeasonsUri.Select(epAndSeason => epAndSeason.Key).ToList();
                await downloadGenerator.AddDownloadLinks(episodes);

                return(episodes);
            }
Exemplo n.º 7
0
            private async Task <IEnumerable <MTReleaseInfo> > FetchMovies(TorznabQuery query)
            {
                var uriSearch  = CreateSearchUri(query.SearchTerm);
                var htmlSearch = await requester.MakeRequest(uriSearch);

                var moviesInfoUris = movieSearchScraper.Extract(htmlSearch);
                var infoHtmlTasks  = moviesInfoUris.Select(async u => await requester.MakeRequest(u));
                var infoHtmls      = await Task.WhenAll(infoHtmlTasks);

                var movies = infoHtmls.Select(h => movieInfoScraper.Extract(h));

                var tasks = movies.Select(async m =>
                {
                    var html = await requester.MakeRequest(m.Link);
                    return(new KeyValuePair <MTReleaseInfo, IHtmlDocument>(m, html));
                });
                var moviesWithHtml = await Task.WhenAll(tasks.ToArray());

                movies = moviesWithHtml.Select(movieWithHtml =>
                {
                    var movie  = movieWithHtml.Key;
                    var html   = movieWithHtml.Value;
                    movie.Link = movieDownloadScraper.Extract(html);
                    movie.Guid = movieWithHtml.Key.Link;
                    return(movie);
                });

                if (query.Year != null)
                {
                    movies = movies
                             .Where(m =>
                                    m.Year == query.Year ||
                                    m.Year == query.Year + 1 ||
                                    m.Year == query.Year - 1)
                             .Select(m =>
                    {
                        m.TitleOriginal = m.TitleOriginal.Replace("(" + m.Year + ")", "(" + query.Year + ")");
                        return(m);
                    });
                }

                return(movies);
            }