Exemple #1
0
        private ImageMergeBatch ReadBatchImageInfo(string batchNumber, DateTime processingDate, string jobFolder)
        {
            var batch = new ImageMergeBatch {
                BatchNumber = batchNumber
            };

            var frontRegex = new Regex(string.Format(adapterConfiguration.ImageMergeFrontFileRegex),
                                       RegexOptions.Compiled | RegexOptions.IgnoreCase);

            //get all front filenames that match the regex, and also extract the trace number using the regex
            var frontFiles = Directory
                             .GetFiles(jobFolder)
                             .Select(filename => new { filename, match = frontRegex.Match(filename) })
                             .Where(x => x.match.Success)
                             .Select(x => new { x.filename, traceNumber = x.match.Groups["trace"].Value })
                             .ToList();

            if (!frontFiles.Any())
            {
                throw new InvalidOperationException(string.Format("No image files found for this job"));
            }

            //read all images
            foreach (var frontFile in frontFiles)
            {
                Log.Verbose("Adding front file {@frontFile} to the merge result", frontFile);

                var rearImageFilename = string.Format(adapterConfiguration.ImageMergeRearFileFormat, processingDate, frontFile.traceNumber);
                //string traceNumber = ResolveTraceNumber(frontFile.traceNumber);
                string traceNumber = RequestHelper.ResolveDocumentReferenceNumber(frontFile.traceNumber);

                var voucher = new ImageMergeVoucher
                {
                    TraceNumber        = traceNumber,
                    FrontImageFilename = frontFile.filename,
                    RearImageFilename  = frontFile.filename.Replace("FRONT", "REAR"),
                };

                batch.Vouchers.Add(voucher);
            }

            return(batch);
        }
Exemple #2
0
        private async Task WriteMergedImageFilesAsync(string batchNumber, string targetDirectory, ImageMergeBatch batch)
        {
            var frontFileName = string.Format(@"{0}\{1}", targetDirectory, string.Format(adapterConfiguration.ImageMergeFrontFilename, batchNumber));
            var rearFileName  = string.Format(@"{0}\{1}", targetDirectory, string.Format(adapterConfiguration.ImageMergeRearFilename, batchNumber));

            using (var mergedFrontFile = File.Create(frontFileName))
                using (var mergedRearFile = File.Create(rearFileName))
                {
                    long frontOffset = 0;
                    long rearOffset  = 0;

                    //read and copy all images async
                    foreach (var voucher in batch.Vouchers)
                    {
                        var frontImageFileStream = File.OpenRead(voucher.FrontImageFilename);
                        var rearImageFileStream  = File.OpenRead(voucher.RearImageFilename);

                        voucher.FrontLength = frontImageFileStream.Length;
                        voucher.RearLength  = rearImageFileStream.Length;

                        voucher.FrontOffset = frontOffset;
                        voucher.RearOffset  = rearOffset;

                        frontOffset += voucher.FrontLength;
                        rearOffset  += voucher.RearLength;

                        var frontTask = frontImageFileStream.CopyToAsync(mergedFrontFile);
                        var rearTask  = rearImageFileStream.CopyToAsync(mergedRearFile);

                        await Task.WhenAll(frontTask, rearTask);
                    }
                }
        }