/// <summary>
        /// Удалить выбранный джампер
        /// </summary>
        public void RemoveJumper()
        {
            if (CanRemoveJumper is false)
            {
                return;
            }

            if (HasChangesValidation() is false)
            {
                return;
            }

            RemoveJumperFromDb();

            SelectedJumper      = Jumpers.Last();
            EditableEpisodeTime = ConvertToEpisodeTime(SelectedEpisodeOption, SelectedJumper);

            TempEpisodeSnapshot       = JsonConvert.SerializeObject(EditableEpisode);
            TempEpisodeOptionSnapshot = JsonConvert.SerializeObject(SelectedEpisodeOption);

            NotifyOfPropertyChange(() => Jumpers);
            NotifyOfPropertyChange(() => SelectedEpisodeOption);
            NotifyOfPropertyChange(() => CanRemoveJumper);
            NotifyOfPropertyChange(() => EpisodeDuration);
            NotifyEditingButtons();
        }
Beispiel #2
0
        /// <summary>
        /// Проверить номер джампера на корректность
        /// </summary>
        /// <param name="number">Номер джампера</param>
        /// <returns></returns>
        public (bool status, string reason) CheckJumperNumber(int?number)
        {
            if (number == null)
            {
                return(false, "недопустимый номер");
            }

            if (Jumpers.Any(j => j.Number == number))
            {
                var dvm = new DialogViewModel("Номер уже существует, хотите ли вы поменять их местами?", DialogType.Question);

                WinMan.ShowDialog(dvm);

                switch (dvm.DialogResult)
                {
                case DialogResult.YesAction:
                    var jumper = Jumpers.First(j => j.Number == number);
                    jumper.Number = SelectedJumper.Number;
                    DbMethods.UpdateDbCollection(jumper);
                    return(true, "Операция успешно завершена");

                case DialogResult.NoAction:
                    return(false, "Данный номер уже существует");

                default:
                    return(false, "Операция отменена");
                }
            }

            return(number > Jumpers.Count
                                ? (false, "Все номера должны быть по порядку без пропусков")
                                : (true, "Операция успешно завершена"));
        }
        /// <summary>
        /// Действие при изменение текста в полях со значениями времени
        /// </summary>
        public void TimeChanged()
        {
            if (SelectedEpisodeOption == null)
            {
                return;
            }

            var time = ConvertFromEpisodeTime(EditableEpisodeTime);

            if (SelectedJumper != null)
            {
                var jumperIndex = Jumpers.IndexOf(SelectedJumper);
                if (jumperIndex > 0)
                {
                    var previousJumper = Jumpers[jumperIndex - 1];
                    if (time.JumperTime < previousJumper.EndTime)
                    {
                        SelectedJumper.StartTime = previousJumper.EndTime;
                        EditableEpisodeTime      = ConvertToEpisodeTime(SelectedEpisodeOption, SelectedJumper);
                        TimeChanged();
                    }
                }

                SelectedJumper.StartTime           = time.JumperTime;
                SelectedJumper.SkipCount           = time.SkipCount;
                SelectedEpisodeOption.CreditsStart = time.CreditsStart;
            }

            NotifyEditingProperties();
            NotifyOfPropertyChange(() => EpisodeDuration);
            NotifyOfPropertyChange(() => EditableEpisodeTime);
            NotifyOfPropertyChange(() => SelectedJumper);
        }
        /// <summary>
        /// Добавить новый джампер
        /// </summary>
        public void AddJumper()
        {
            if (CanAddJumper is false)
            {
                return;
            }

            if (HasChangesValidation() is false)
            {
                return;
            }

            var count    = Jumpers.Count + 1;
            var optionId = SelectedEpisodeOption.EpisodeOptionId;
            var jumper   = new Jumper {
                EpisodeOptionId = optionId, Number = count
            };

            Jumpers.Add(jumper);
            SelectedEpisodeOption.Jumpers.Add(Jumpers.Last());

            AddJumperToDb(jumper);

            SelectedJumper            = Jumpers.Last();
            EditableEpisodeTime       = ConvertToEpisodeTime(SelectedEpisodeOption, SelectedJumper);
            TempEpisodeOptionSnapshot = JsonConvert.SerializeObject(SelectedEpisodeOption);
            NotifyOfPropertyChange(() => Jumpers);
            NotifyOfPropertyChange(() => SelectedEpisodeOption);
            NotifyOfPropertyChange(() => CanRemoveJumper);
            NotifyOfPropertyChange(() => EpisodeDuration);
            NotifyEditingButtons();
        }
Beispiel #5
0
        /// <summary>
        ///     Начальные действия джамперов
        /// </summary>
        private async void StartJumperActions()
        {
            if (CurrentJumper.IsWorking)
            {
                return;
            }
            CurrentJumper.IsWorking = true;
            switch (CurrentJumper.JumperMode)
            {
            case JumperMode.Skip:
                var time = (long)CurrentJumper.EndTime.TotalMilliseconds;
                await Task.Run(() => MediaPlayer.Time = time);

                break;

            case JumperMode.Mute:
                await Task.Run(() => MediaPlayer.Mute = !MediaPlayer.Mute);

                break;

            case JumperMode.IncreaseVolume:
            case JumperMode.LowerVolume:
                await Task.Run(() => MediaPlayer.Volume = CurrentJumper.StandardVolumeValue);

                break;
            }

            var currentIndex = Jumpers.IndexOf(CurrentJumper);

            CurrentJumper = currentIndex == Jumpers.Count - 1 ? null : Jumpers[currentIndex + 1];
        }
        public void RefreshJumpersConfig()
        {
            var jumpers = Jumpers.OrderBy(j =>
            {
                if (j.StandardVolumeValue > 0)
                {
                    if (j.StartTime == new TimeSpan())
                    {
                        return(new TimeSpan());
                    }

                    return(j.StartTime);
                }

                return(j.StartTime + new TimeSpan(1L));
            }
                                          ).ToList();

            for (var i = 0; i < jumpers.Count(); i++)
            {
                var num = i + 1;
                jumpers[i].Number = num;
            }

            UpdateDbCollection <Jumper>(jumpers);
            Jumpers = new BindableCollection <Jumper>(CurrentAddressInfo.Jumpers);
        }
Beispiel #7
0
        /// <summary>
        /// Подсчет длительности эпизода
        /// </summary>
        /// <returns></returns>
        private TimeSpan CalculatingDuration(EpisodeOption episodeOption = null)
        {
            int totalSkipCount;

            if (episodeOption != null)
            {
                totalSkipCount = episodeOption.Jumpers.Sum(j => j?.SkipCount ?? 0);

                return(episodeOption.CreditsStart - new TimeSpan(0, 0, totalSkipCount * 5));
            }


            if (SelectedEpisodeOption == null)
            {
                return(new TimeSpan());
            }

            totalSkipCount = Jumpers.Sum(j => j.SkipCount);

            var duration = SelectedEpisodeOption.CreditsStart - new TimeSpan(0, 0, totalSkipCount * 5);

            //SelectedEpisodeOption.Duration = duration;

            return(duration);
        }
Beispiel #8
0
        /// <summary>
        /// Добавить новый джампер в БД
        /// </summary>
        /// <param name="jumper">добавляемый джампер</param>
        private void AddJumperToDb(Jumper jumper)
        {
            using (var ctx = new CVDbContext(AppDataPath))
            {
                ctx.EpisodeOptions
                .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption
                       .EpisodeOptionId).Duration = CalculatingDuration();
                ctx.Jumpers.Add(jumper);
                ctx.SaveChanges();

                Jumpers.Last().JumperId = ctx.Jumpers.ToList().Last().JumperId;
                NotifyOfPropertyChange(() => Jumpers);
            }
        }
Beispiel #9
0
        /// <summary>
        /// Удалить выбранный джампер из БД
        /// </summary>
        private void RemoveJumperFromDb()
        {
            using (var ctx = new CVDbContext(AppDataPath))
            {
                var jumper = ctx.Jumpers.First(j => j.JumperId == SelectedJumper.JumperId);

                ctx.Jumpers.Remove(jumper);
                ctx.SaveChanges();

                SelectedEpisodeOption.Jumpers.Remove(SelectedJumper);
                Jumpers.Remove(SelectedJumper);

                ctx.EpisodeOptions
                .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption
                       .EpisodeOptionId).Duration = CalculatingDuration();
                ctx.SaveChanges();
            }
        }
        /// <summary>
        ///     Добавить джампер
        /// </summary>
        public void AddJumper()
        {
            var startTime = Jumpers.Count == 0 ? new TimeSpan() : Jumpers.Last().EndTime + new TimeSpan(1000);
            var jumper    = new Jumper
            {
                JumperMode  = JumperModes.First(),
                Number      = Jumpers.Count + 1,
                StartTime   = startTime,
                EndTime     = startTime + new TimeSpan(1000),
                Film        = EEVM.ESVM.SelectedFilm,
                Season      = EEVM.ESVM.SelectedSeason,
                Episode     = EEVM.CurrentEpisode,
                AddressInfo = EEVM.SelectedAddressInfo
            };

            InsertEntityToDb(jumper);
            Jumpers        = new BindableCollection <Jumper>(CurrentAddressInfo.Jumpers);
            SelectedJumper = Jumpers.LastOrDefault();
        }
        /// <summary>
        /// Импорт настроек опции
        /// </summary>
        public void ImportOptionData()
        {
            if (CanImportOptionData is false)
            {
                return;
            }

            using (var ctx = new CVDbContext(AppDataPath))
            {
                var option = ctx.EpisodeOptions
                             .Include(eo => eo.Jumpers)
                             .First(eo => eo.EpisodeOptionId == SelectedEpisodeOption.EpisodeOptionId);
                if (option == null)
                {
                    throw new Exception("Опция не существует");
                }

                foreach (var jumper in option.Jumpers.ToList())
                {
                    ctx.Jumpers.Remove(jumper);
                    ctx.SaveChanges();
                }


                Jumpers.Clear();
                SelectedEpisodeOption.Jumpers.Clear();

                var count = 1;
                foreach (var j in ImportingEpisodeOption.Jumpers)
                {
                    var jumper = new Jumper
                    {
                        EpisodeOptionId = SelectedEpisodeOption.EpisodeOptionId,
                        StartTime       = j.StartTime,
                        SkipCount       = j.SkipCount,
                        Number          = count++
                    };

                    option.Jumpers.Add(jumper);
                    ctx.SaveChanges();
                    jumper = ctx.Jumpers.ToList().Last();
                    Jumpers.Add(jumper);
                    SelectedEpisodeOption.Jumpers.Add(jumper);
                }

                option.CreditsStart = ImportingEpisodeOption.CreditsStart;
                SelectedEpisodeOption.CreditsStart = ImportingEpisodeOption.CreditsStart;

                option.Duration = CalculatingDuration(option);
                SelectedEpisodeOption.Duration = CalculatingDuration(option);
                SelectedJumper      = Jumpers.First();
                EditableEpisodeTime = ConvertToEpisodeTime(SelectedEpisodeOption, SelectedJumper);
                ctx.SaveChanges();

                TempEpisodeOptionSnapshot = JsonConvert.SerializeObject(SelectedEpisodeOption);
                NotifyOfPropertyChange(() => SelectedEpisodeOption);
                NotifyOfPropertyChange(() => Jumpers);
                NotifyOfPropertyChange(() => CanImportOptionData);
                NotifyEditingButtons();
                NotifyTimeProperties();
            }
        }