/// <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); }
/// <summary> /// Установить все значения по умолчанию /// </summary> public void SetDefaultValues() { if (CanSetDefaultValues is false) { NotifyOfPropertyChange(() => CanSetDefaultValues); return; } var dvm = new DialogViewModel("Данная операция безвозвратна. Вы действительно хотите установить настройки по умолчанию?", DialogType.Question); WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.NoAction) { return; } WatchingSettings = new WatchingSettings { Id = WatchingSettings.Id }; UpdateDbCollection(entity: WatchingSettings); //SaveChanges(); LoadWS(); NotifyButtons(); WinMan.ShowDialog(new DialogViewModel("Данные успешно сброшены по умоланию", DialogType.Info)); }
/// <summary> /// Отмена измененных данных /// </summary> public void CancelChanges() { if (CanCancelChanges is false) { return; } var dvm = new DialogViewModel(null, DialogType.CANCEL_CHANGES); WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.NO_ACTION) { return; } EditableEpisode = JsonConvert.DeserializeObject <CartoonEpisode>(TempEpisodeSnapshot); SelectedEpisodeOption = JsonConvert.DeserializeObject <EpisodeOption>(TempEpisodeOptionSnapshot); var tempId = SelectedJumper.JumperId; Jumpers = new BindableCollection <Jumper>(SelectedEpisodeOption.Jumpers); SelectedJumper = Jumpers.First(j => j.JumperId == tempId); EditableEpisodeTime = ConvertToEpisodeTime(SelectedEpisodeOption, SelectedJumper); NotifyEditingProperties(); NotifyOfPropertyChange(() => Jumpers); NotifyOfPropertyChange(() => SelectedJumper); }
/// <summary> /// Изменение значения свойства с учетом отмены выбора /// </summary> /// <param name="element">Исходное значение объекта</param> /// <param name="value">Конечное значение объекта</param> private void ChangePropertyValue(ref object element, object value) { var(identifier, oldValue, hasChanges) = SetStartingValues(element, value); if (hasChanges is false) { return; } if (((ISettingsViewModel)ActiveItem)?.HasChanges ?? false) { var vm = new DialogViewModel(null, DialogType.SAVE_CHANGES); _ = WinMan.ShowDialog(vm); switch (vm.DialogResult) { case DialogResult.YES_ACTION: ((ISettingsViewModel)ActiveItem).SaveChanges(); break; case DialogResult.NO_ACTION: break; case DialogResult.CANCEL_ACTION: Application.Current.Dispatcher.BeginInvoke( new Action(() => SetOldValue(identifier, oldValue)), DispatcherPriority.ContextIdle, null); return; } } NotifyChangedProperties(identifier, value); }
/// <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 EditVoiceOvers() { var wm = new WindowsManagerViewModel(new VoiceOversEditingViewModel(GlobalIdList)); WinMan.ShowDialog(wm); UpdateVoiceOverList(); }
/// <summary> /// Открыть редактор озвучек /// </summary> public void EditVoiceOvers() { var wm = new WindowsManagerViewModel(new VoiceOversEditingViewModel( websiteId: GlobalIdList.WebSiteId, cartoonId: GlobalIdList.CartoonId)); WinMan.ShowDialog(wm); UpdateVoiceOverList(); }
/// <summary> /// Сбросить последнюю дату просмотра у эпизодов /// </summary> public void ResetLastDateViewed() { if (CanResetLastDateViewed is false) { NotifyOfPropertyChange(() => CanResetLastDateViewed); } DialogViewModel dvm; var filmName = SelectedGlobalResetFilm.Name; if (filmName == "всех") { dvm = new DialogViewModel($"Вы уверены что хотите сбросить даты последнего просмотра " + $"ВСЕХ эпизодов? Эта операция необратима.", DialogType.Question); } else { dvm = new DialogViewModel($"Вы уверены что хотите сбросить даты последнего просмотра " + $"всех эпизодов \"{filmName}\"? " + "Эта операция необратима.", DialogType.Question); } WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.YesAction) { var resetEpisodes = new List <Episode>(); if (filmName == "всех") { Films.ToList().ForEach(s => resetEpisodes.AddRange(s.Episodes)); } else { resetEpisodes.AddRange(Films.First(f => f.Name == filmName).Episodes); } if (resetEpisodes.All(re => re.LastDateViewed == AppVal.ResetTime)) { WinMan.ShowDialog(new DialogViewModel("Дата уже сброшена.", DialogType.Info)); return; } foreach (var ep in resetEpisodes) { ep.LastDateViewed = AppVal.ResetTime; } UpdateDbCollection(objCollection: resetEpisodes); WinMan.ShowDialog(new DialogViewModel("Дата успешно сброшена.", DialogType.Info)); } NotifyOfPropertyChange(() => CanResetLastDateViewed); }
/// <summary> /// Добавить новый эпизод /// </summary> public void AddEpisode() { if (CanAddEpisode is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var cartoon = ctx.Cartoons .Include(c => c.CartoonVoiceOvers) .First(c => c.CartoonId == GlobalIdList.CartoonId); if (cartoon.CartoonVoiceOvers.Count == 0) { WinMan.ShowDialog(new DialogViewModel( "У выбранного мультсериала отсутствуют озвучки, добавьте одну или более для создания нового эпизода", DialogType.INFO)); return; } // загрузка первой озвучки выбранного м/с CartoonVoiceOver voiceOver; if (DefaultVoiceOver == null) { voiceOver = ctx.Cartoons .Include(ce => ce.CartoonVoiceOvers) .First(c => c.CartoonId == GlobalIdList.CartoonId).CartoonVoiceOvers.First(); } else { voiceOver = ctx.VoiceOvers .First(vo => vo.CartoonVoiceOverId == DefaultVoiceOver.CartoonVoiceOverId); } var episode = CreateNewEpisode(ctx, voiceOver); CreateNewEpisodeOption(ctx, episode, voiceOver); episode = ctx.CartoonEpisodes.ToList().Last(); Episodes.Add(episode); NotifyOfPropertyChange(() => Episodes); } SelectedEpisode = Episodes.LastOrDefault(); EpisodeIndexes.CurrentIndex = Episodes.IndexOf(SelectedEpisode); EpisodeIndexes.EndIndex = Episodes.IndexOf(SelectedEpisode); NotifyOfPropertyChange(() => CanEditNextEpisode); NotifyOfPropertyChange(() => CanEditPreviousEpisode); }
/// <summary> /// Открыть меню разработчика /// </summary> public void SecretAction() { if (SecretVisibility == Visibility.Visible) { SecretVisibility = Visibility.Collapsed; return; } if (WinMan.ShowDialog(new SecretViewModel()) is true) { SecretVisibility = Visibility.Visible; } }
public void TotalEpisodesReset() { var dvm = new DialogViewModel( "Внимание, данное действие сбросит дату последнего просмотра у ВСЕХ эпизодов.\nВы хотите продолжить?", DialogType.QUESTION); WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.YES_ACTION) { //reset time } }
/// <summary> /// Сохранить изменения /// </summary> public void SaveChanges() { if (CanSaveChanges is false) { NotifyOfPropertyChange(() => CanSaveChanges); return; } UpdateDbCollection(entity: WatchingSettings); LoadWS(); NotifyButtons(); WinMan.ShowDialog(new DialogViewModel("Изменения успешно сохранены", DialogType.Info)); }
public void SetDefaultValues() { var dvm = new DialogViewModel("Данная операция безвозвратна. Вы действительно хотите установить настройки по умолчанию?", DialogType.QUESTION); WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.NO_ACTION) { return; } GeneralSettings = new GeneralSettingsValue(); SaveChanges(); }
/// <summary> /// Сброс даты последнего просмотра у всех эпизодов /// </summary> public void TotalEpisodesReset() { var dvm = new DialogViewModel( "Внимание, данное действие сбросит дату последнего просмотра у ВСЕХ эпизодов.\nВы хотите продолжить?", DialogType.Question); WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.YesAction) { var films = GetDbCollection <Film>(); films.SelectMany(f => f.Episodes).ToList().ForEach(e => e.LastDateViewed = AppVal.ResetTime); UpdateDbCollection(films.Where(f => f.Name != "всех")); } }
/// <summary> /// Сохранить изменения /// </summary> public void SaveChanges() { if (CanSaveChanges is false) { return; } if (HasAddressChanges) { var episode = GetEpisodeFromDbById(CurrentAddressInfo.Episode.Id); var changeDefaultAddressInfo = Equals(episode.AddressInfo.Id, CurrentAddressInfo.Id); UpdateDbCollection(CurrentAddressInfo); AddressSnapshot = JsonConvert.SerializeObject(CurrentAddressInfo); if (changeDefaultAddressInfo) { episode.AddressInfo = CurrentAddressInfo; UpdateDbCollection(episode); } } if (HasJumperChanges) { UpdateDbCollection <Jumper>(Jumpers); Jumpers = new BindableCollection <Jumper>(CurrentAddressInfo.Jumpers); CancelSelection(); RefreshJumpersConfig(); } WinMan.ShowDialog(new DialogViewModel("Изменения успешно сохранены", DialogType.Info)); if (IsInterfaceUnlocked is false) { IsInterfaceUnlocked = true; } NotifyChanges(); NotifyOfPropertyChange(() => CanPlay); NotifyOfPropertyChange(() => CurrentEpisodeTime); NotifyOfPropertyChange(() => CurrentAddressInfo); NotifyOfPropertyChange(() => CanDecreaseVideoRate); NotifyOfPropertyChange(() => CanIncreaseVideoRate); NotifyOfPropertyChange(() => CanDefaultVideoRate); NotifyOfPropertyChange(() => CanAddFirstJumper); NotifyOfPropertyChange(() => CanAddVolumeJumper); NotifyOfPropertyChange(() => EEVM.CanSetDefaultAddress); }
/// <summary> /// Действие при старте просмотра /// </summary> public void Start() { if (CanStart is false) { return; } CreateList(); ActivateDeactivateTray((Window)((MainViewModel)Parent).GetView()); VideoPlayer = new VideoPlayerViewModel(this, WatchingEpisodesCount, CheckedEpisodes) { MainView = (Window)((MainViewModel)Parent).GetView() }; WinMan.ShowWindow(VideoPlayer); NotifyOfPropertyChange(() => EpisodesCountRemainingString); NotifyOfPropertyChange(() => CanStart); }
/// <summary> /// Установить номер джампера /// </summary> public void SetJumperNumber() { if (CanSetJumperNumber is false) { return; } var(status, reason) = CheckJumperNumber(NewJumperNumber); WinMan.ShowDialog(new DialogViewModel(reason, DialogType.Info)); if (status) { SelectedJumper.Number = NewJumperNumber ?? 0; UpdateDbCollection(SelectedJumper); JumperSnapshot = JsonConvert.SerializeObject(SelectedJumper); Jumpers = new BindableCollection <Jumper>(CurrentAddressInfo.Jumpers); } NotifyChanges(); }
/// <summary> /// Установить адрес /// </summary> public async void SetAddress() { if (CanSetAddress is false) { return; } if (await CheckAddress(NewAddress)) { WinMan.ShowDialog(new DialogViewModel("Адрес успешно обновлен", DialogType.Info)); CurrentAddressInfo.Link = NewAddress; } else { WinMan.ShowDialog(new DialogViewModel("Адрес некорректный или отсутствует интернет соединение", DialogType.Info)); } NotifyChanges(); NotifyOfPropertyChange(() => CanSetAddress); }
/// <summary> /// Удалить выбраный м/с /// </summary> public void RemoveCartoon() { var dvm = new DialogViewModel(null, DialogType.REMOVE_OBJECT); WinMan.ShowDialog(dvm); switch (dvm.DialogResult) { case DialogResult.YES_ACTION: break; case DialogResult.NO_ACTION: return; default: return; } using (var ctx = new CVDbContext(AppDataPath)) { var cartoon = ctx.Cartoons.Find(GlobalIdList.CartoonId); if (cartoon != null) { ctx.Cartoons.Remove(cartoon); } var voiceOverForRemove = ctx.VoiceOvers .Where(vo => vo.Cartoons.Count == 1) .Where(vo => vo.Cartoons .Any(c => c.CartoonId == GlobalIdList.CartoonId)); ctx.VoiceOvers.RemoveRange(voiceOverForRemove); ctx.SaveChanges(); } var parent = ((CartoonsEditorViewModel)Parent); parent.Cartoons.Remove(parent.SelectedCartoon); }
/// <summary> /// Отмена изменений /// </summary> public void CancelChanges() { if (CanCancelChanges is false) { NotifyOfPropertyChange(() => CanCancelChanges); return; } var dvm = new DialogViewModel("Данная операция безвозвратна. Вы действительно хотите отменить изменения?", DialogType.Question); WinMan.ShowDialog(dvm); if (dvm.DialogResult == DialogResult.NoAction) { return; } WatchingSettings = TempWS; SaveChanges(); LoadWS(); NotifyButtons(); }
/// <summary> /// Загрузка данных выбранного эпизода для редактирования /// </summary> /// <returns></returns> private bool LoadSelectedEpisodeData() { using (var ctx = new CVDbContext(AppDataPath)) { var episode = ctx.CartoonEpisodes .Include(ce => ce.EpisodeVoiceOvers) .First(ce => ce.CartoonEpisodeId == GlobalIdList.EpisodeId); if (episode.EpisodeVoiceOvers.Count == 0) { WinMan.ShowDialog(new DialogViewModel( "У выбранного эпизода отсутствуют озвучки, добавьте одну или более для продолжения редактирования", DialogType.INFO)); return(false); } var voiceOvers = ctx.VoiceOvers .Include(vo => vo.CartoonEpisodes) .Include(vo => vo.CheckedEpisodes) .Where(vo => vo.CartoonEpisodes .Any(ce => ce.CartoonEpisodeId == GlobalIdList.EpisodeId)); foreach (var vo in voiceOvers) { vo.SelectedEpisodeId = episode.CartoonEpisodeId; } var options = ctx.EpisodeOptions .Include(eo => eo.Jumpers) .Where(eo => eo.CartoonEpisodeId == GlobalIdList.EpisodeId); EditableEpisode = CloneObject <CartoonEpisode>(episode); VoiceOvers = new BindableCollection <CartoonVoiceOver>(voiceOvers); EpisodeOptions = new BindableCollection <EpisodeOption>(options); return(true); } }
/// <summary> /// Действие при старте просмотра /// </summary> public async void Start() { if (CanStart is false) { return; } var cartoonsCount = Cartoons.Count(c => c.Checked); if (GeneralSettings.WatchingInRow is true && cartoonsCount > 1) { WinMan.ShowDialog(new DialogViewModel( "На данный момент нельзя смотреть подряд эпизоды, если выбрано более одного мультсериала." , DialogType.INFO)); return; } ((MainViewModel)Parent).WindowState = WindowState.Minimized; StartBrowser(); await Task.Run(StartWatch); }
/// <summary> /// Выполнить команду /// </summary> public async void StartCommand() { if (string.IsNullOrWhiteSpace(SelectedCommand)) { return; } bool result; switch (SelectedCommand) { case "Добавить \"Южный Парк\"": result = await AddSouthPark(); break; case "Проверить длительности эпизодов": result = ValidateEpisodesDuration(); break; case "Проверить содержимое фильма \"Южный Парк\"": result = await CheckSP(); break; case "Удалить все фильмы": result = RemoveFilms(); break; default: WinMan.ShowDialog(new DialogViewModel("Неизвестная команда", DialogType.Info)); return; } WinMan.ShowDialog(new DialogViewModel(result ? "Команда успешно выполнена" : "Команда не выполнена", DialogType.Info)); }
/// <summary> /// Проверка на наличие изменений через диалоговое окно /// </summary> /// <returns></returns> private bool HasChangesValidation() { if (HasChanges) { var dvm = new DialogViewModel(null, DialogType.SAVE_CHANGES); WinMan.ShowDialog(dvm); switch (dvm.DialogResult) { case DialogResult.YES_ACTION: SaveChanges(); return(true); case DialogResult.NO_ACTION: CancelChanges(); return(true); default: return(false); } } return(true); }
/// <summary> /// Создание файла /// </summary> /// <param name="fileName">Имя файла (без расширения и указания папки)</param> /// <param name="canRewriteFile">Возможность перезаписать существующий файл</param> /// <param name="fileExtension">Расширение файла (по умолчанию .cview)</param> /// <param name="folderPath">Путь до файла (по умолчанию WorkingData)</param> public static string CreateFile(string fileName, bool canRewriteFile = false, string fileExtension = null, string folderPath = null) { if (folderPath == null) { folderPath = $"{SettingsHelper.AppDataPath}"; } if (fileExtension == null) { fileExtension = SettingsHelper.DefaultFilesExtension; } var fullFilePath = $"{folderPath}\\{fileName}{fileExtension}"; if (Directory.Exists(folderPath) is false) { Directory.CreateDirectory(folderPath); } if (File.Exists(fullFilePath) is false) { using (var fs = new FileStream(fullFilePath, FileMode.Create)) { fs.Dispose(); } } else { if (canRewriteFile is false) { return(fullFilePath); } var dvm = new DialogViewModel(null, DialogType.OVERWRITE_FILE); WinMan.ShowDialog(dvm); switch (dvm.DialogResult) { case DialogResult.YES_ACTION: using (var fs = new FileStream(fullFilePath, FileMode.Create)) { fs.Dispose(); } break; case DialogResult.NO_ACTION: var filePathLength = ($"{folderPath}\\{fileName}").Length; fullFilePath = $"{fullFilePath.Substring(0, filePathLength)}_Copy{fileExtension}"; using (var fs = new FileStream(fullFilePath, FileMode.Create)) { fs.Dispose(); } break; case DialogResult.CANCEL_ACTION: break; } } return(fullFilePath); }
public void ResetLastDateViewed() { if (CanResetLastDateViewed is false) { return; } using (var ctx = new CVDbContext(AppDataPath)) { var dvm = new DialogViewModel("Вы уверены что хотите сбросить дату последнего просмотра? Эта операция необратима.", DialogType.QUESTION); WinMan.ShowDialog(dvm); switch (dvm.DialogResult) { case DialogResult.YES_ACTION: break; default: return; } List <CartoonEpisode> episodes; if (IsSelectedAllCartoonsToReset) { episodes = new List <CartoonEpisode>(ctx.CartoonEpisodes .Include(ce => ce.EpisodeOptions) .Include(ce => ce.CartoonVoiceOver)); } else { episodes = new List <CartoonEpisode>(ctx.CartoonEpisodes .Include(ce => ce.EpisodeOptions) .Include(ce => ce.CartoonVoiceOver) .Where(ce => ce.CartoonId == SelectedGlobalResetCartoon.CartoonId)); } var succesfull = false; foreach (var episode in episodes) { var option = episode.EpisodeOptions .FirstOrDefault(eo => eo.CartoonVoiceOverId == episode.CartoonVoiceOver.CartoonVoiceOverId && eo.LastDateViewed > ResetTime); if (option == null) { continue; } option.LastDateViewed = ResetTime; ctx.SaveChanges(); succesfull = true; } WinMan.ShowDialog(new DialogViewModel(succesfull ? "Сброс успешно завершен." : "Дата уже сброшена.", DialogType.INFO)); } }