/// <summary> /// Создать общий список адресов (без длительности) эпизодов в каждом сезоне фильма (Южный Парк) /// </summary> /// <param name="film">Фильм (Южный Парк)</param> /// <param name="wvm">Индикатор прогресса загрузки</param> /// <param name="stopwatch">Таймер</param> private static async Task CreateSpAddresses(Film film, WaitViewModel wvm, Stopwatch stopwatch) { var addressInfoList = new List <AddressInfo>(); wvm.CurrentLoadingStatus = LoadingStatus.CreatingAddresses; if (await GetCancelCreateAddressesResult(addressInfoList)) { return; } var seasons = await GetSeasonsByFilm(film, wvm, stopwatch); var totalEpisodes = await GetEpisodesBySeasons(seasons, wvm, stopwatch); var totalAddressInfoCount = await Task.Run(() => totalEpisodes.Sum(episode => episode.FullNumber == 1503 ? 1 : 2)); var totalAddressInfoList = await Task.Run(() => totalEpisodes.SelectMany(e => e.AddressInfoList).ToList()); wvm.MaxPercentValue += totalAddressInfoCount; UpdateOperationTime(wvm, stopwatch); foreach (var season in seasons) { if (await GetCancelCreateAddressesResult(addressInfoList)) { return; } var episodes = totalEpisodes.Where(e => e.SeasonNumber == season.Number).ToList(); wvm.ResetCurrentLoadingData(true, true); wvm.MaxEpisodeValue = episodes.Count; wvm.CurrentSeasonValue++; wvm.CurrentPercentValue++; foreach (var episode in episodes) { if (await GetCancelCreateAddressesResult(addressInfoList)) { return; } wvm.CurrentPercentValue++; var addressesCount = episode.FullNumber == 1503 ? 1 : 2; wvm.MaxAddressNumber = addressesCount; wvm.CurrentEpisodeValue++; wvm.ResetCurrentLoadingData(false, true); wvm.CurrentAddressNumber++; wvm.CurrentPercentValue++; var link = GetSPEpAddressSPOnline(season.Number, episode.Number); if (totalAddressInfoList.Any(a => a.Link == link)) { continue; } var voice = GetSpVoiceNameSpOnline(season.Number, episode.Number); var addressInfo = new AddressInfo { Name = $"online-south-park.ru_{voice}", Link = link, VoiceOver = voice, Film = film, Season = season, Episode = episode }; addressInfoList.Add(addressInfo); UpdateOperationTime(wvm, stopwatch); if (addressesCount == 1) { continue; } wvm.CurrentAddressNumber++; wvm.CurrentPercentValue++; link = GetSpAddressFreehat(season.Number, episode.Number); if (totalAddressInfoList.Any(a => a.Link == link)) { continue; } voice = GetSpVoiceNameFreehat(season.Number, episode.Number); addressInfo = new AddressInfo { Name = $"sp.freehat.cc_{voice}", Link = link, VoiceOver = voice, Film = film, Season = season, Episode = episode }; addressInfoList.Add(addressInfo); UpdateOperationTime(wvm, stopwatch); } if (addressInfoList.Count == 0) { continue; } await Task.Run(() => InsertEntityListToDb(addressInfoList)); addressInfoList.Clear(); } }
/// <summary> /// Создать общий список эпизодов в каждом сезоне фильма (Южный Парк) /// </summary> /// <param name="film">Фильм</param> /// <param name="wvm">Индикатор прогресса загрузки</param> /// <param name="stopwatch">Таймер</param> private static async Task CreateSPEpisodes(Film film, WaitViewModel wvm, Stopwatch stopwatch) { var episodes = new List <Episode>(); wvm.CurrentLoadingStatus = LoadingStatus.CreatingEpisodes; if (await GetCancelCreateEpisodesResult(episodes)) { return; } var seasons = await GetSeasonsByFilm(film, wvm, stopwatch); var seasonEpisodes = await Task.Run(() => seasons.SelectMany(s => s.Episodes).ToList()); var totalEpisodesCount = await Task.Run(() => seasons.Sum(season => GetSPEpisodesCount(season.Number))); wvm.MaxPercentValue += totalEpisodesCount; UpdateOperationTime(wvm, stopwatch); foreach (var season in seasons) { if (await GetCancelCreateEpisodesResult(episodes)) { return; } wvm.CurrentSeasonValue++; wvm.CurrentPercentValue++; var episodesCount = GetSPEpisodesCount(season.Number); wvm.ResetCurrentLoadingData(true); wvm.MaxEpisodeValue = episodesCount; for (var j = 0; j < episodesCount; j++) { if (await GetCancelCreateEpisodesResult(episodes)) { return; } wvm.CurrentEpisodeValue++; wvm.CurrentPercentValue++; var epNum = j + 1; var epFullNum = season.Number * 100 + epNum; if (seasonEpisodes.Any(e => e.FullNumber == epFullNum)) { continue; } var newEpisode = new Episode { Name = $"Episode {epNum} of {season.Number} season", Description = $"Description of {epNum} episode of {season.Number} season", Number = epNum, Season = season, Film = film }; episodes.Add(newEpisode); UpdateOperationTime(wvm, stopwatch); } } if (episodes.Count > 0) { await Task.Run(() => InsertEntityListToDb(episodes)); } }