public async Task <IActionResult> Index(ImageSetViewModel viewModel) { viewModel.AllSets = await db.ImageSets.ToListAsync(); if (viewModel.ValidationErrors == null) { viewModel.ValidationErrors = new List <string>(); } return(View(viewModel)); }
private static void ApplyFilter(ImageSetViewModel sender) { var targetViewModel = sender?.SelectedImageTypeTarget; ApplyFilter(targetViewModel); }
private static void ManifestDesignerUserControl_Loaded(object sender) { var imageSetViewModel = _imageSetViewModel = (ImageSetViewModel)Exposed.From(sender).imageSetViewModel; if (imageSetViewModel == null) { return; } var visualAssetsControl = (FrameworkElement)Exposed.From(sender).visualAssetsControl; if (!visualAssetsControl.IsLoaded) { visualAssetsControl.Loaded -= VisualAssetsControl_Loaded; visualAssetsControl.Loaded += VisualAssetsControl_Loaded; } var imageSetModel = Exposed.From(sender).imageSetModel; var imageSetTargetViewModels = (IList <ImageSetTargetViewModel>)imageSetViewModel.ImageTypeTargets; _imageSetTarget = (ImageSetTarget)imageSetModel.Root; var imageGenerator = Exposed.From(imageSetModel).imageGenerator; if (imageGenerator.GetType().Name == "IImageGeneratorProxy") { return; } var imageGeneratorInterface = typeof(IImageConstraint).Assembly .GetTypes() .First(x => x.Name == "IImageGenerator"); var imageGeneratorProxy = new ProxyGenerator().CreateInterfaceProxyWithTarget(imageGeneratorInterface, imageGenerator, new ImageGeneratorInterceptor()); var imageGeneratorField = typeof(ImageSetModel).GetField("imageGenerator", BindingFlags.Instance | BindingFlags.NonPublic); imageGeneratorField.SetValue(imageSetModel, imageGeneratorProxy); var filePicker = (IFilePicker)Exposed.From(imageSetModel).filePicker; if (filePicker.GetType().Name == "IFilePickerProxy") { return; } imageSetTargetViewModels.Single(x => x.ImageType == null).PropertyChanged += ImageSetTargetViewModel_PropertyChanged; imageSetViewModel.PropertyChanged += ImageSetViewModel_PropertyChanged; var proxy = (IFilePicker) new ProxyGenerator().CreateInterfaceProxyWithTarget(typeof(IFilePicker), filePicker, new DialogFilterInterceptor()); var filePickerField = typeof(ImageSetModel).GetField("filePicker", BindingFlags.Instance | BindingFlags.NonPublic); if (filePickerField == null) { return; } filePickerField.SetValue(imageSetModel, proxy); var imageReaderFactory = Exposed.From(imageGenerator).imageReaderFactory; if (!(Exposed.From(imageReaderFactory).imageReaders is IDictionary readers)) { return; } var formatsToAdd = MagickImageReader.SupportedFormats .Except(readers.Keys.OfType <string>()) .ToArray(); if (formatsToAdd.Any()) { var type = typeof(IImageConstraint).Assembly .GetTypes() .First(x => x.Name == "IImageReader"); //.GetType($"{assembly.GetName().Name}.IImageReader"); var wrapper = DelegateWrapper.WrapAs((Func <string, IEnumerable <IImageConstraint>, Task <Image> >)MagickImageReader.LoadAsync, (Func <string, IEnumerable <IImageConstraint>, Task <Stream> >)MagickImageReader.LoadStreamAsync, (Func <IEnumerable <string> >)(() => formatsToAdd), new DelegateWrapper.MethodByNameAndEnumReturnType("get_ImageGraphicsType", "ImageGraphicsType", "Vector"), type); foreach (var format in formatsToAdd) { readers.Add(format, wrapper); } } var imageReaderFactoryField = Exposed.From(imageSetTargetViewModels.First()).previewImageLoader ?.GetType() .GetField("imageReaderFactory", BindingFlags.Instance | BindingFlags.NonPublic); if (imageReaderFactoryField == null) { return; } foreach (var imageSetTargetViewModel in imageSetTargetViewModels) { var exposedModel = Exposed.From(imageSetTargetViewModel); var previewImageLoader = exposedModel.previewImageLoader; imageReaderFactoryField.SetValue(previewImageLoader, imageReaderFactory); if (!string.IsNullOrEmpty(exposedModel.SourceText) && formatsToAdd.Any(x => x.Equals(Path.GetExtension(exposedModel.SourceText), StringComparison.InvariantCultureIgnoreCase)) && exposedModel.SourceImage == null) { ((UserControl)sender).Dispatcher.InvokeAsync(() => exposedModel.UpdateImagePreviewAsync()); } } }
public async Task <IActionResult> AddImageSet(ImageSetViewModel viewModel) { viewModel.ValidationErrors = new List <string>(); var results = new List <ValidationResult>(); var context = new ValidationContext(viewModel); if (!Validator.TryValidateObject(viewModel, context, results, true)) { foreach (var error in results) { viewModel.ValidationErrors.Add(error.ErrorMessage); } return(RedirectToAction("Index", viewModel)); } if (!viewModel.IsCyrContains && !viewModel.IsLatContains && !viewModel.IsNumContains) { viewModel.ValidationErrors.Add("Нужно выбрать одно из: 'Содержит кириллицу', 'Содержит латиницу', 'Содержит цифры'"); return(RedirectToAction("Index", viewModel)); } if (viewModel.Archive == null) { viewModel.ValidationErrors.Add("Загрука файла обязательна"); return(RedirectToAction("Index", viewModel)); } var fileName = viewModel.Archive.FileName; string fileExt = fileName.Substring(fileName.LastIndexOf('.')); if (fileExt != ".zip") { viewModel.ValidationErrors.Add("Можно загрузить только zip архив"); return(RedirectToAction("Index", viewModel)); } var path = $"{_appEnvironment.WebRootPath}/files/{fileName}"; FileStream fileStream = new FileStream(path, FileMode.Create); viewModel.Archive.CopyTo(fileStream); fileStream.Close(); var reader = new ZipReader(); if (!reader.IsZipArchive(path)) { viewModel.ValidationErrors.Add("Файл не является zip архивом"); return(RedirectToAction("Index", viewModel)); } var zipList = reader.GetFileList(path); var imageCount = zipList.Count; if (viewModel.AnswersLocation == "InDetachedFile") { imageCount -= 1; } var minCount = 2000; var maxCount = 3000; if (viewModel.IsCyrContains) { minCount += 3000; maxCount += 3000; } if (viewModel.IsLatContains) { minCount += 3000; maxCount += 3000; } if (viewModel.IsNumContains) { minCount += 3000; maxCount += 3000; } if (viewModel.IsScharContains) { minCount += 3000; maxCount += 3000; } if (viewModel.IsCaseSens) { minCount += 3000; maxCount += 3000; } if (imageCount < minCount || imageCount > maxCount) { viewModel.ValidationErrors.Add($"При данных настройках архив может содержать от {minCount} до {maxCount} картинок"); return(RedirectToAction("Index", viewModel)); } if (viewModel.AnswersLocation == "InDetachedFile" && !zipList.Contains("answers.txt")) { viewModel.ValidationErrors.Add("В архиве отсутствует файл с ответами"); return(RedirectToAction("Index", viewModel)); } if (viewModel.AnswersLocation == "InDetachedFile") { var errorsList = reader.ValidateAnswersFile(path, imageCount); if (errorsList.Count > 0) { viewModel.ValidationErrors.AddRange(errorsList); return(RedirectToAction("Index", viewModel)); } } var imageSet = new ImageSet { Title = viewModel.Title, IsCyrContains = viewModel.IsCyrContains, IsLatContains = viewModel.IsLatContains, IsNumContains = viewModel.IsNumContains, IsScharContains = viewModel.IsScharContains, IsCaseSens = viewModel.IsCaseSens, AnswersLocation = viewModel.AnswersLocation, ArchivePath = path, CreateDate = DateTime.Now }; db.ImageSets.Add(imageSet); await db.SaveChangesAsync(); return(RedirectToAction("Index")); }