private bool DownloadAndSaveDocument(PDFApi pdfApi, ImageApi imageApi, string fileId, int workerNumber, OperationsWorkflow.SaveOperationType saveOperationType, object saveOperationConfiguration, ProgressDelegate downloadOperationStartEventHandler, string inputFileAbsolutePath, out string downloadedDocumentFileName) { downloadedDocumentFileName = Path.GetTempFileName(); using (FileStream outputFileStream = new FileStream(downloadedDocumentFileName, FileMode.Open)) { try { if (saveOperationType == OperationsWorkflow.SaveOperationType.SavePDF) { PassportPDFRequestsUtilities.DownloadPDF(pdfApi, new PdfSaveDocumentParameters(fileId), workerNumber, inputFileAbsolutePath, outputFileStream, downloadOperationStartEventHandler); } else if (saveOperationType == OperationsWorkflow.SaveOperationType.SaveImageAsPDFMRC) { PassportPDFRequestsUtilities.DownloadImageAsPDFMRC(imageApi, PassportPDFParametersUtilities.GetImageSaveAsPDFMRCParameters((ImageSaveAsPDFMRCActionConfiguration)saveOperationConfiguration, fileId), workerNumber, inputFileAbsolutePath, outputFileStream, downloadOperationStartEventHandler); } return(true); } catch (Exception ex) { OnError(LogMessagesUtils.ReplaceMessageSequencesAndReferences(FrameworkGlobals.MessagesLocalizer.GetString("message_output_file_download_failure", FrameworkGlobals.ApplicationLanguage), inputFileAbsolutePath, additionalMessage: ex.Message)); return(false); } } }
private bool HandleOutputFileProduction(FileToProcess fileToProcess, string fileId, int workerNumber, OperationsWorkflow.SaveOperationType saveOperationType, object saveOperationConfiguration, PDFApi pdfApi, ImageApi imageApi, FileProductionRules fileProductionRules, WorkflowProcessingResult workflowProcessingResult, bool fileSizeReductionIsIntended, bool inputIsPDF, long inputFileSize, string outputFileAbsolutePath) { if (!DownloadAndSaveDocument(pdfApi, imageApi, fileId, workerNumber, saveOperationType, saveOperationConfiguration, DownloadOperationStartEventHandler, fileToProcess.FileAbsolutePath, out string downloadedDocumentFileName)) { return(false); } bool keepProducedFile = MustProducedFileBeKept(workflowProcessingResult, fileSizeReductionIsIntended, inputIsPDF, inputFileSize, FileUtils.GetFileSize(downloadedDocumentFileName)); bool outputIsInput = FileUtils.AreSamePath(fileToProcess.FileAbsolutePath, outputFileAbsolutePath); if (keepProducedFile) { if (fileProductionRules.DeleteOriginalFileOnSuccess && !outputIsInput) { try { FileUtils.DeleteFile(fileToProcess.FileAbsolutePath); } catch (Exception exception) { OnWarning(LogMessagesUtils.ReplaceMessageSequencesAndReferences(FrameworkGlobals.MessagesLocalizer.GetString("message_original_file_deletion_failure", FrameworkGlobals.ApplicationLanguage), fileName: fileToProcess.FileAbsolutePath, additionalMessage: exception.Message)); } } FileUtils.MoveFile(downloadedDocumentFileName, outputFileAbsolutePath); File.SetCreationTime(outputFileAbsolutePath, File.GetCreationTime(fileToProcess.FileAbsolutePath)); } else { if (!outputIsInput) { FileUtils.CopyFile(fileToProcess.FileAbsolutePath, outputFileAbsolutePath); } if (fileSizeReductionIsIntended) { // Inform file size reduction failure workflowProcessingResult.WarningMessages.Add(LogMessagesUtils.GetWarningStatustext(new ReduceWarningInfo() { WarningCode = ReduceWarningCode.FileSizeReductionFailure }, fileToProcess.FileAbsolutePath)); } FileUtils.DeleteFile(downloadedDocumentFileName); } if (fileProductionRules.KeepWriteAndAccessTime) { FileUtils.SetOriginalLastAccessTime(fileToProcess.FileAbsolutePath, outputFileAbsolutePath); } return(true); }