/// <summary>
        ///     Добавление эпизодов
        /// </summary>
        public async Task <bool> AddSouthPark()
        {
            if (CanAddAddSouthPark is false)
            {
                return(false);
            }
            AddingFilmCancellationTokenSource = new CancellationTokenSource();
            AddingFilmToken = AddingFilmCancellationTokenSource.Token;

            try
            {
                var wvm = new WaitViewModel();
                WinMan.ShowWindow(wvm);

                ((Window)((MainViewModel)Parent).GetView()).IsEnabled = false;

                await CreateSP(wvm);

                ((Window)((MainViewModel)Parent).GetView()).IsEnabled = true;
                wvm.TryClose();
            }
            catch (Exception e)
            {
                WinMan.ShowWindow(new DialogViewModel(e.ToString(), DialogType.Error, e));
                return(false);
            }

            Films = new BindableCollection <Film>(GetDbCollection <Film>());
            return(AddingFilmToken.IsCancellationRequested is false);
        }
Exemple #2
0
        public void ValidSeconds_False()
        {
            WaitViewModel viewModel = new WaitViewModel
            {
                Seconds = -10
            };

            Assert.IsFalse(viewModel.ValidSeconds);
        }
Exemple #3
0
        public void ValidSeconds_True()
        {
            WaitViewModel viewModel = new WaitViewModel
            {
                Seconds = 10
            };

            Assert.IsTrue(viewModel.ValidSeconds);
        }
Exemple #4
0
        public void Seconds_Valid_False()
        {
            WaitViewModel viewModel = new WaitViewModel
            {
                Seconds = -10
            };

            Assert.AreEqual(viewModel.Seconds, 0);
        }
Exemple #5
0
        public void Seconds_Valid_True()
        {
            WaitViewModel viewModel = new WaitViewModel
            {
                Seconds = 10
            };

            Assert.AreEqual(viewModel.Seconds, 10);
        }
Exemple #6
0
        public void WaitViewModelParameter()
        {
            WaitViewModel viewModel = new WaitViewModel
            {
                Seconds = 5
            };

            Assert.AreEqual(viewModel.Parameters, "5 seconds");
        }
Exemple #7
0
        public void WaitViewModel_SetsCorrectly()
        {
            WaitViewModel viewModel = new WaitViewModel
            {
                ViewModel = "WaitViewModel"
            };

            Assert.AreEqual(viewModel.ViewModel, "WaitViewModel");
        }
Exemple #8
0
        /// <summary>
        /// Constructor for <see cref="WaitOperation"/>.
        /// </summary>
        public WaitOperation(WaitViewModel waitViewModel)
        {
            if (waitViewModel == null)
            {
                throw new ArgumentNullException(nameof(waitViewModel));
            }

            _waitViewModel         = waitViewModel;
            _waitViewModel.Waiting = true;
        }
 private static Task <List <Season> > GetSeasonsByFilm(Film film, WaitViewModel wvm, Stopwatch stopwatch)
 {
     return(Task.Run(() =>
     {
         var seasons = GetSeasonListFromDbByFilmId(film.Id);
         wvm.MaxSeasonValue = SeasonCount;
         wvm.MaxPercentValue = SeasonCount;
         UpdateOperationTime(wvm, stopwatch);
         return seasons;
     }));
 }
        public async void ShowWaitingPage(Action waitAction)
        {
            if (_waitingPage == null)
            {
                _waitingPage = new WaitingPage();
            }

            var waitingViewModel = new WaitViewModel(waitAction);// {NavigationService = this};

            _waitingPage.BindingContext = waitingViewModel;

            await Navigation.PushAsync(_waitingPage);
        }
        public static async Task CreateSP(WaitViewModel wvm)
        {
            //Core.Initialize(VlcDataPath.ToString());
            _libVlc = new LibVLC();
            //Application.Current.Dispatcher.Invoke(() =>
            //{
            //    Vlc = new VlcControl();
            //    Vlc.SourceProvider.CreatePlayer(VlcDataPath);
            //});

            var films = GetDbCollection <Film>();

            if (films.All(f => f.Name != SP))
            {
                var result = new Film
                {
                    Name        = SP,
                    Description = "«Южный парк» (он же South Park и Саус Парк) — фильм картинками, " +
                                  "который отличается от других мультиков тем, что градус треша и угара в нем зашкаливает, " +
                                  "сферически воплощаясь в каждом из жителей маленького и нифига не тихого городка в Колорадо, " +
                                  "которые окружают главных героев: Эрик Картман — маленький расист с зашкаливающим чувством величия " +
                                  "и неуемной жаждой действий. Стэн Марш — обладатель критичного ума, офигевающий над своим папой " +
                                  "и креативным долбозвоном в одном лице, Рэнди Маршем. Кайл Брофловски — рыжеволосый и ироничный " +
                                  "персонаж, чье здравомыслие с лихвой уравнивает общую шизофрению происходящего (постоянный предмет " +
                                  "нападок жирдяя) и главный убиванец фильма, Кенни МакКормик — бичеватый индивид с капюшоном на " +
                                  "все лицо и пошловатой логикой микроскопического эротомана. Не менее колоритен ныне заменивший " +
                                  "вечно подыхающего коротыша другой мегаломаньяк — Профессор Хаос, ненавистник пиписек и " +
                                  "латентный гомосексуалист — Баттерс Стотч.",
                    FilmType = FilmType.Мультсериал
                };

                InsertEntityToDb(result);
            }

            var stopwatch = new Stopwatch();

            stopwatch.Start();
            var film = GetDbCollection <Film>().Last();

            await AsyncCreateSpSeasons(film, wvm, stopwatch);
            await CreateSPEpisodes(film, wvm, stopwatch);
            await CreateSpAddresses(film, wvm, stopwatch);
            await AddSpAddressesDurations(film, wvm, stopwatch);
            await SetDefaultAddressInfoToEpisode(film);
        }
        /// <summary>
        /// Создать общий список сезонов в фильме (Южный Парк)
        /// </summary>
        /// <param name="film">Фильм (Южный Парк)</param>
        /// <param name="wvm">Индикатор прогресса загрузки</param>
        /// <param name="stopwatch">Таймер</param>
        private static async Task AsyncCreateSpSeasons(Film film, WaitViewModel wvm, Stopwatch stopwatch)
        {
            wvm.CurrentLoadingStatus = LoadingStatus.CreatingSeasons;
            var seasons = new List <Season>();

            if (await GetCancelCreateSeasonsResult(seasons))
            {
                return;
            }

            var filmSeasons = await GetSeasonsByFilm(film, wvm, stopwatch);

            for (var i = 0; i < SeasonCount; i++)
            {
                if (await GetCancelCreateSeasonsResult(seasons))
                {
                    return;
                }
                var num = i + 1;
                wvm.CurrentSeasonValue++;
                wvm.CurrentPercentValue++;

                if (filmSeasons.Any(s => s.Number == num))
                {
                    continue;
                }

                var newSeason = new Season
                {
                    Number      = num,
                    Description = $"Description of Season_{num}",
                    Film        = film
                };

                seasons.Add(newSeason);
                UpdateOperationTime(wvm, stopwatch);
            }

            if (seasons.Count > 0)
            {
                await Task.Run(() => InsertEntityListToDb(seasons));
            }
        }
        /// <summary>
        /// Добавить длительности эпизодов к каждому адресу
        /// </summary>
        /// <param name="film">Фильм (Южный Парк)</param>
        /// <param name="wvm">Индикатор прогресса загрузки</param>
        /// <param name="stopwatch">Таймер</param>
        private static async Task AddSpAddressesDurations(Film film, WaitViewModel wvm, Stopwatch stopwatch)
        {
            wvm.CurrentLoadingStatus = LoadingStatus.AddingDurations;
            if (AddingFilmToken.IsCancellationRequested)
            {
                return;
            }
            wvm.MaxSeasonValue = SeasonCount;
            var addressInfoList = await Task.Run(() => film.AddressInfoList);

            wvm.MaxPercentValue = addressInfoList.Count;

            foreach (var addressInfo in addressInfoList)
            {
                if (AddingFilmToken.IsCancellationRequested)
                {
                    return;
                }
                wvm.CurrentSeasonValue  = addressInfo.Season.Number;
                wvm.MaxEpisodeValue     = GetSPEpisodesCount(addressInfo.Season.Number);
                wvm.CurrentEpisodeValue = addressInfo.Episode.Number;
                wvm.MaxAddressNumber    = addressInfo.Episode.FullNumber == 1503 ? 1 : 2;
                if (wvm.CurrentAddressNumber >= wvm.MaxAddressNumber)
                {
                    wvm.CurrentAddressNumber = 0;
                }
                wvm.CurrentAddressNumber++;
                wvm.CurrentPercentValue++;

                if (addressInfo.TotalDuration > new TimeSpan())
                {
                    continue;
                }
                var duration = await GetEpisodeDuration(addressInfo.Link);

                addressInfo.TotalDuration = duration;
                addressInfo.FilmEndTime   = duration;

                UpdateDbCollection(addressInfo);
                UpdateOperationTime(wvm, stopwatch);
            }
        }
Exemple #14
0
        public void WaitView_SetsOnInstantiation()
        {
            WaitViewModel viewModel = new WaitViewModel();

            Assert.AreEqual(viewModel.View, "WaitView");
        }
 private static void UpdateOperationTime(WaitViewModel wvm, Stopwatch stopwatch)
 {
     wvm.ElapsedTime   = stopwatch.Elapsed;
     wvm.RemainingTime = stopwatch.Elapsed;
 }
        /// <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));
            }
        }
        /// <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();
            }
        }
 private static Task <List <Episode> > GetEpisodesBySeasons(List <Season> seasons, WaitViewModel wvm,
                                                            Stopwatch stopwatch)
 {
     return(Task.Run(() =>
     {
         var episodes = seasons.SelectMany(s => s.Episodes).ToList();
         wvm.MaxPercentValue += episodes.Count;
         UpdateOperationTime(wvm, stopwatch);
         return episodes;
     }));
 }
Exemple #19
0
        private void CreateSolution(SolutionVariantData solutionVariantData, SolutionDataViewModel solutionData)
        {
            var solution = GetSolution();

            var waitViewModel = new WaitViewModel();
            var window = WpfServices.CreateWindow<WaitView>(waitViewModel);
            WpfServices.SetWindowOwner(window, solution.DTE.MainWindow);
            waitViewModel.Completed += async (s, a) =>
            {
                await window.Dispatcher.InvokeAsync(() =>
                {
                    window.DialogResult = !a.Cancelled && a.Error == null;
                });
            };
            waitViewModel.Caption = "Creating solution...";
            waitViewModel.Run((p, ct) =>
            {
                int count = solutionVariantData.Items.Length;
                double k = 1.0/count;
                for (int i = 0; i < count; ++i)
                {
                    var pr = k*i;
                    p.Report(pr);
                    int j = i;
                    CreateSolutionItem(
                        null,
                        solutionVariantData.Items[i], progress =>
                        {
                            pr = k*j + progress*k;
                            p.Report(pr);
                        },
                        solutionData,
                        ct);
                    ct.ThrowIfCancellationRequested();
                }
            });
            var retVal = window.ShowDialog() ?? false;

            if (!retVal)
            {
                throw new WizardCancelledException();
            }
        }
Exemple #20
0
 public TaskResult(Task task, WaitViewModel viewModel = null)
 {
     this.Task      = task;
     this.viewModel = viewModel ?? new WaitViewModel();
 }