async Task LoadTVShowSeason(int tv_id, int season_number, string showName) { Item = await Task.Run(() => TMDbService.GetDetailedTVShowSeasonAsync(tv_id, season_number, showName)); Item.poster_path = ""; PosterSource.Clear(); foreach (var posterItem in Item.images.posters) { PosterSource.Add(posterItem); } CastSource.Clear(); foreach (var castItem in Item.credits.cast) { CastSource.Add(castItem); } CrewSource.Clear(); foreach (var crewItem in Item.credits.crew) { CrewSource.Add(crewItem); } EpisodeSource.Clear(); foreach (var episodeItem in Item.episodes) { EpisodeSource.Add(episodeItem); } LoadCompleted(); }
private static void TryClickButton(EpisodeSource episodeSource) { var tryNumber = 30; while (true) { tryNumber--; if (tryNumber == 0) { throw new InvalidOperationException("Couldn't click in button"); } try { episodeSource.Button.Click(); return; } catch (ElementClickInterceptedException) { Thread.Sleep(500); } } }
protected override async Task <Uri> GetEpisodeDownloadUrl(Episode episode) { var episodeSrcUrls = new List <string>(); Driver.Url = episode.EpisodeUri.AbsoluteUri; var wait = new WebDriverWait(Driver, TimeSpan.FromSeconds(30)); AcceptCookies(wait); var table = GetTable(wait); var rows = table.FindElements(By.TagName("tr")); var episodeSources = new List <EpisodeSource>(); foreach (var row in rows) { var columns = row.FindElements(By.TagName("td")); var providerName = columns[0].Text; if (providerName.ToLower().Contains("cda".ToLower())) { var spans = columns[2].FindElements(By.TagName("span")); var soundsLanguage = spans[1].GetAttribute("textContent"); if (!soundsLanguage.Equals("japoński", StringComparison.InvariantCultureIgnoreCase)) { continue; } var quality = columns[1].Text; var button = columns[5].FindElement(By.TagName("a")); var episodeSource = new EpisodeSource { ProviderType = ProviderType.Cda, Quality = QualityParser.FromString(quality), Language = Language.PL, Button = button }; episodeSources.Add(episodeSource); } } if (episodeSources.Count == 0) { throw new NullReferenceException("Episodes with chosen criteria not found"); } episodeSources = episodeSources .OrderByDescending(a => a.Language) .ThenByDescending(a => a.Quality) .ToList(); foreach (var episodeSource in episodeSources) { try { TryClickButton(episodeSource); IWebElement iframe; try { iframe = wait.Until(a => a.FindElement(By.XPath("/html/body/div[4]/div/article/div[2]/div/iframe"))); } catch (WebDriverTimeoutException) { continue; } var src = iframe.GetAttribute("src"); var fullSrc = $"{src}?wersja={episodeSource.Quality.GetDescription()}"; episodeSource.SourceUrl = fullSrc; } catch (InvalidOperationException) { } } Uri episodeUri = null; foreach (var episodeSource in episodeSources) { try { episodeUri = await new ProviderFactory(Driver).GetProvider(episodeSource.ProviderType) .GetVideoSourceAsync(episodeSource.SourceUrl); break; } catch (WebDriverTimeoutException) { } } if (episodeUri == null) { throw new InvalidOperationException("Could not find any episode source to download"); } return(episodeUri); }