/// <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));
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)); }
/// <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)));
/// <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)));
/// <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));
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>(); }
/// <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, "Ошибки отсутствуют")); }
/// <summary> /// Проверить расширение на соответствие допустимым типам /// </summary> private static bool ValidateExtension(string filePath, bool onlyDgnAndDocTypes) => FilePathOperations.ExtensionWithoutPointFromPath(filePath). Map(extension => onlyDgnAndDocTypes ? ValidFileExtensions.ContainsInDocAndDgnFileTypes(extension) : ValidFileExtensions.ContainsInFileTypesValid(extension));
/// <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));
/// <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());
/// <summary> /// Сформировать путь для сохранения подписи /// </summary> public static string GetFilePathByFolder(string signatureFolderPath, string personId, bool isVerticalImage) => FilePathOperations.CombineFilePath(signatureFolderPath, personId + (isVerticalImage ? "_rotated" : String.Empty), SaveFormat);
/// <summary> /// Сравнить расширения /// </summary> public static bool IsFileExtensionEqual(string fileExtension, FileExtensionType extensionTypeCompare) => extensionTypeCompare.ToString().ToLowerCaseCurrentCulture() == FilePathOperations.ExtensionWithoutPoint(fileExtension).ToLowerCaseCurrentCulture();