public IObservable<TorrentMovieSource> Work(TorrentSite site, CancellationToken cancellationToken) { var torrents = TorrentList.GetTorrents(site, cancellationToken).Result; var movies = torrents.Select(torrent => GetMovie(torrent, cancellationToken)); return movies.Merge(); }
public static async Task<IObservable<TorrentEntry>> GetTorrents(TorrentSite site, CancellationToken cancellationToken) { var document = await PirateRequest.OpenAsync(new Uri(site.ListUrl), cancellationToken); var entries = document.QuerySelectorAll(site.ListItemSelector) .Select(c => new { Text = c.TextContent, Href = c.GetAttribute("href")?.Trim().TrimEnd('/') + "/" }) .Select(m => new TorrentEntry { Title = m.Text, Quality = TorrentQualityExtractor.ExtractQuality(m.Text), TorrentPage = site.PageBaseUrl + m.Href, TorrentUri = new Uri(site.PageBaseUrl + m.Href) }); return Observable.ToObservable(FilterMovies(entries)); }