/// <summary>
 /// Сохранить изображения подписи асинхронно
 /// </summary>
 private async Task <IResultValue <ISignatureFile> > ToSignatureFileAsync(ISignatureFileData signatureFileData,
                                                                          string signatureFolder) =>
 await _fileSystemOperations.SaveFileFromByte(FilePathOperations.CombineFilePath(signatureFolder, signatureFileData.PersonId,
                                                                                 SignatureFile.SaveFormat),
                                              signatureFileData.SignatureSource.ToArray()).
 ResultValueOkAsync(filePath => new SignatureFile(signatureFileData.PersonId, signatureFileData.PersonInformation,
                                                  signatureFolder, signatureFileData.IsVerticalImage));
Example #2
0
        public FilePath(string filePathServer, string filePathClient, bool onlyDgnAndDocTypes = false)
        {
            if (String.IsNullOrWhiteSpace(filePathServer))
            {
                throw new ArgumentNullException(nameof(filePathServer));
            }
            if (String.IsNullOrWhiteSpace(filePathClient))
            {
                throw new ArgumentNullException(nameof(filePathClient));
            }

            if (!ValidateExtension(filePathServer, onlyDgnAndDocTypes))
            {
                throw new KeyNotFoundException(nameof(filePathServer));
            }
            if (!ValidateExtension(filePathClient, onlyDgnAndDocTypes))
            {
                throw new KeyNotFoundException(nameof(filePathClient));
            }

            string fileTypeServer = FilePathOperations.ExtensionWithoutPointFromPath(filePathServer);
            string fileTypeClient = FilePathOperations.ExtensionWithoutPointFromPath(filePathClient);

            if (fileTypeServer != fileTypeClient)
            {
                throw new InvalidOperationException("Расширения клиентской и серверной частей не равны");
            }

            FileExtensionType = ValidFileExtensions.GetFileTypesValid(fileTypeServer);
            FilePathServer    = FilePathOperations.GetValidFilePath(filePathServer);
            FilePathClient    = FilePathOperations.GetValidFilePath(filePathClient);
        }
        /// <summary>
        /// Проверить целостность выходных данных для конвертации
        /// </summary>
        public static IResultError IsFileDataRequestValid(FileDataRequestBase fileDataRequest)
        {
            string fileName      = Path.GetFileNameWithoutExtension(fileDataRequest?.FilePath);
            string fileExtension = FilePathOperations.ExtensionWithoutPointFromPath(fileDataRequest?.FilePath);

            bool isValidName       = !String.IsNullOrWhiteSpace(fileName);
            bool isValidExtension  = ValidFileExtensions.ContainsInDocAndDgnFileTypes(fileExtension);
            bool isValidDataSource = fileDataRequest?.FileDataSource != null;

            var errors = new List <IErrorCommon>();

            if (!isValidName)
            {
                errors.Add(new ErrorCommon(ErrorConvertingType.IncorrectFileName, $"Некорректное имя файла {fileName}"));
            }

            if (!isValidExtension)
            {
                errors.Add(new ErrorCommon(ErrorConvertingType.IncorrectExtension, $"Некорректное расширение файла {fileExtension}"));
            }

            if (!isValidDataSource)
            {
                errors.Add(new ErrorCommon(ErrorConvertingType.IncorrectDataSource, $"Некорректные входные данные конвертации"));
            }

            return(new ResultError(errors));
        }
Example #4
0
 /// <summary>
 /// Конвертер информации о файле из локальной модели в трансферную
 /// </summary>
 private async Task <IResultValue <FileDataRequestClient> > ToFileDataRequest(IFileData fileData) =>
 await _fileSystemOperations.FileToByteAndZip(fileData.FilePath).
 ResultValueOkBindAsync(fileSource =>
                        AdditionalFileExtensions.FileExtensions.
                        Select(extension => FilePathOperations.ChangeFileName(fileData.FilePath, fileData.FileName, extension)).
                        FirstOrDefault(filePath => _filePathOperations.IsFileExist(filePath)).
                        Map(fileAdditionalPath => ToFileDataRequest(fileData, fileSource, fileAdditionalPath)));
Example #5
0
 /// <summary>
 /// Создать папку для сохранения отконвертированных файлов по типу расширения
 /// </summary>
 public static string CreateSavingPath(string filePathServer, FileExtensionType fileExtensionType,
                                       IFileSystemOperations fileSystemOperations) =>
 Path.GetDirectoryName(filePathServer).
 Map(directory => fileSystemOperations.CreateFolderByName(Path.Combine(directory, Path.GetFileNameWithoutExtension(filePathServer)),
                                                          fileExtensionType.ToString())).
 Map(serverDirectory => FilePathOperations.CombineFilePath(serverDirectory,
                                                           Path.GetFileNameWithoutExtension(filePathServer),
                                                           fileExtensionType.ToString().ToLowerCaseCurrentCulture()));
 /// <summary>
 /// Сохранить дополнительный файл
 /// </summary>
 private async Task <IResultValue <string> > SaveAdditionalFile(FileDataRequestServer fileDataRequest, string directoryPath,
                                                                Guid guidPackage) =>
 await FilePathOperations.CombineFilePath(directoryPath, guidPackage.ToString(), fileDataRequest.FileExtensionAdditional).
 WhereContinueAsyncBind(_ => fileDataRequest.FileDataSourceAdditional != null &&
                        fileDataRequest.FileDataSourceAdditional.Length > 0,
                        okFunc: filePath => _fileSystemOperations.UnzipFileAndSave(filePath, fileDataRequest.FileDataSourceAdditional),
                        badFunc: filePath => new ResultValue <string>(new ErrorCommon(ErrorConvertingType.ValueNotInitialized,
                                                                                      $"Файл дополнительный данных не задан {filePath}")).
                        Map(result => Task.FromResult((IResultValue <string>)result)));
Example #7
0
 /// <summary>
 /// Конвертер информации о файле из локальной модели в трансферную
 /// </summary>
 private async Task <IResultValue <FileDataRequestClient> > ToFileDataRequest(IFileData fileData, byte[] fileSource,
                                                                              string fileAdditionalPath) =>
 await fileAdditionalPath.
 WhereContinueAsyncBind(filePath => !String.IsNullOrWhiteSpace(filePath),
                        filePath => _fileSystemOperations.FileToByteAndZip(filePath),
                        filePath => Task.FromResult((IResultValue <byte[]>) new ResultValue <byte[]>(new byte[0]))).
 ResultValueOkAsync(fileAdditionalSource =>
                    new FileDataRequestClient(fileData.FilePath, fileData.ColorPrintType, fileData.StatusProcessing,
                                              fileSource, FilePathOperations.ExtensionWithoutPointFromPath(fileAdditionalPath),
                                              fileAdditionalSource));
Example #8
0
        public FileData(string filePath, ColorPrintType colorPrintType)
        {
            string fileExtension = FilePathOperations.ExtensionWithoutPointFromPath(filePath);
            string fileName      = Path.GetFileNameWithoutExtension(filePath);

            if (String.IsNullOrEmpty(fileExtension) || String.IsNullOrEmpty(fileName) || String.IsNullOrEmpty(filePath))
            {
                throw new ArgumentNullException(nameof(filePath));
            }
            if (!ValidFileExtensions.ContainsInDocAndDgnFileTypes(fileExtension))
            {
                throw new KeyNotFoundException(nameof(fileExtension));
            }

            FileExtensionType = ValidFileExtensions.DocAndDgnFileTypeDictionary[fileExtension];
            FileName          = fileName;
            FilePath          = filePath;
            ColorPrintType    = colorPrintType;

            FileErrors = new List <IErrorCommon>();
        }
Example #9
0
        /// <summary>
        /// Сохранить файл из трансферной модели на жесткий диск
        /// </summary>
        private async Task <IErrorCommon> SaveFileDataSourceFromDtoResponse(FileDataSourceResponseClient fileDataSourceResponseClient,
                                                                            string convertingDirectoryName)
        {
            string fileName           = Path.GetFileNameWithoutExtension(fileDataSourceResponseClient.FileName);
            string fileExtension      = FilePathOperations.ExtensionWithoutPoint(Path.GetExtension(fileDataSourceResponseClient.FileName));
            string fileExtensionValid = ValidFileExtensions.GetFileTypesValid(fileExtension).ToString().ToLowerCaseCurrentCulture();
            string directoryPath      = _fileSystemOperations.CreateFolderByName(convertingDirectoryName, fileExtensionValid.ToUpperCaseCurrentCulture());


            if (String.IsNullOrWhiteSpace(fileName))
            {
                return(new ErrorCommon(ErrorConvertingType.IncorrectFileName, $"Некорректное имя файла {fileName}"));
            }
            if (String.IsNullOrWhiteSpace(fileName))
            {
                return(new ErrorCommon(ErrorConvertingType.IncorrectExtension, $"Некорректное расширение файла {fileExtension}"));
            }
            if (String.IsNullOrWhiteSpace(directoryPath))
            {
                return(new ErrorCommon(ErrorConvertingType.RejectToSave, "Директория сохранения не создана"));
            }
            if (fileDataSourceResponseClient.FileDataSource.Length == 0)
            {
                return(new ErrorCommon(ErrorConvertingType.IncorrectDataSource,
                                       $"Некорректные входные данные {fileName}"));
            }

            string filePath = FilePathOperations.CombineFilePath(directoryPath, fileName, fileExtensionValid);

            Task <bool> UnzipFileAndSaveBool() => _fileSystemOperations.UnzipFileAndSave(filePath, fileDataSourceResponseClient.FileDataSource).
            MapAsync(result => result.OkStatus);

            await _dialogService.RetryOrIgnoreBoolFunction(UnzipFileAndSaveBool, $"Файл {filePath} открыт или используется. Повторить попытку сохранения?");

            return(new ErrorCommon(ErrorConvertingType.NoError, "Ошибки отсутствуют"));
        }
Example #10
0
 /// <summary>
 /// Проверить расширение на соответствие допустимым типам
 /// </summary>
 private static bool ValidateExtension(string filePath, bool onlyDgnAndDocTypes) =>
 FilePathOperations.ExtensionWithoutPointFromPath(filePath).
 Map(extension => onlyDgnAndDocTypes
                      ? ValidFileExtensions.ContainsInDocAndDgnFileTypes(extension)
                      : ValidFileExtensions.ContainsInFileTypesValid(extension));
Example #11
0
 /// <summary>
 /// Изменить имя клиента
 /// </summary>
 public IFilePath ChangeClientName(string clientName) =>
 (!String.IsNullOrWhiteSpace(clientName))
         ? new FilePath(FilePathServer, FilePathOperations.ChangeFilePathNameWithoutExtension(FilePathClient, clientName))
         : this;
 /// <summary>
 /// Корректность пути сохранения Pdf
 /// </summary>
 private static bool PdfPathValid(string filePath) =>
 FilePathOperations.ExtensionWithoutPointFromPath(filePath).
 Map(fileExtension => !String.IsNullOrEmpty(filePath) && !String.IsNullOrEmpty(fileExtension) &&
     FileExtensionType.Pdf.ToString().ContainsIgnoreCase(fileExtension));
Example #13
0
 /// <summary>
 /// Получить путь к сохраненному файлу для обработки
 /// </summary>
 private static IResultCollection <IFileDataSourceServer> GetSavedFileDataSource(IDocumentLibrary documentLibrary, IFilePath filePath) =>
 new FileDataSourceServer(documentLibrary.FullName,
                          filePath.ChangeExtensions(FilePathOperations.ExtensionWithoutPointFromPath(documentLibrary.FullName)).
                          FilePathClient,
                          ConvertingModeType.Main).
 Map(fileDataSource => new ResultValue <IFileDataSourceServer>(fileDataSource).ToResultCollection());
Example #14
0
 /// <summary>
 /// Сформировать путь для сохранения подписи
 /// </summary>
 public static string GetFilePathByFolder(string signatureFolderPath, string personId, bool isVerticalImage) =>
 FilePathOperations.CombineFilePath(signatureFolderPath, personId + (isVerticalImage ? "_rotated" : String.Empty),
                                    SaveFormat);
Example #15
0
 /// <summary>
 /// Сравнить расширения
 /// </summary>
 public static bool IsFileExtensionEqual(string fileExtension, FileExtensionType extensionTypeCompare) =>
 extensionTypeCompare.ToString().ToLowerCaseCurrentCulture() ==
 FilePathOperations.ExtensionWithoutPoint(fileExtension).ToLowerCaseCurrentCulture();