/// <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));
            }
        }