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