Esempio n. 1
0
        private void MakeRarAndParFiles(FileSystemInfo toPost, String nameWithoutExtension,
                                        DirectoryInfo processedFolder, String password)
        {
            Int64 size = toPost.Size();
            var   humanReadableSize = UploadSpeedReport.GetHumanReadableSize(size);

            log.DebugFormat("ToPost size: {0}({1})", size, humanReadableSize);
            var rarSizeRecommendation = configuration.RarNParSettings
                                        .Where(rr => rr.FromSizeBytes < size)
                                        .OrderByDescending(rr => rr.FromSize)
                                        .First();

            log.DebugFormat("Rar and par settings found: [{0},{1},{2}]", rarSizeRecommendation.FromSize, rarSizeRecommendation.RarSize, rarSizeRecommendation.Par2Percentage);
            var      rarWrapper   = new RarWrapper(configuration.InactiveProcessTimeout, configuration.RarLocation);
            DateTime rarStartTime = DateTime.Now;

            rarWrapper.Compress(
                toPost,
                processedFolder,
                nameWithoutExtension,
                Settings.DetermineOptimalRarSize(rarSizeRecommendation.RarSize,
                                                 configuration.YEncLineSize, configuration.YEncLinesPerMessage),
                password,
                configuration.RarExtraParameters);
            if (log.IsInfoEnabled)
            {
                TimeSpan rarTimeElapsed = DateTime.Now - rarStartTime;
                Double   rarSpeed       = (Double)size / rarTimeElapsed.TotalSeconds;
                log.InfoFormat("Rarred {0} of file(s) with a speed of {1}", humanReadableSize, UploadSpeedReport.GetHumanReadableSpeed(rarSpeed));
            }

            var      parWrapper    = new ParWrapper(configuration.InactiveProcessTimeout, configuration.ParLocation, configuration.ParCommandFormat);
            var      processedSize = processedFolder.Size();
            Int32    partSize      = parWrapper.CalculatePartSize(processedSize, configuration.YEncPartSize);
            DateTime parStartTime  = DateTime.Now;
            Boolean  makePar       = true;

            while (makePar && partSize / configuration.YEncPartSize < 10)   //Max 10 loops.
            {
                try
                {
                    parWrapper.CreateParFilesInDirectory(
                        processedFolder, nameWithoutExtension, partSize, rarSizeRecommendation.Par2Percentage, configuration.ParExtraParameters);
                    makePar = false;
                }
                catch (Par2BlockSizeTooSmallException)
                {
                    partSize += configuration.YEncPartSize;
                }
            }
            if (log.IsInfoEnabled)
            {
                TimeSpan parTimeElapsed = DateTime.Now - parStartTime;
                Double   parSpeed       = (Double)size / parTimeElapsed.TotalSeconds;
                log.InfoFormat("Parred {0} of file(s) with a speed of {1}", UploadSpeedReport.GetHumanReadableSize(size), UploadSpeedReport.GetHumanReadableSpeed(parSpeed));
            }
        }