示例#1
0
        public bool HasValidExtension(string filename, OutputFormat format)
        {
            var validExtensions = GetValidExtensions(format);
            var ext             = PathSafe.GetExtension(filename).ToLowerInvariant();

            return(validExtensions.Contains(ext));
        }
示例#2
0
        public void AddFileToQueue(string path)
        {
            PathCheck(path);

            var fileExtension  = _pathSafe.GetExtension(path) ?? string.Empty;
            var legalFileTypes = new List <string> {
                ".ps", ".pdf"
            };

            fileExtension = fileExtension.ToLowerInvariant();
            if (!legalFileTypes.Contains(fileExtension))
            {
                throw new COMException("Only .ps and .pdf files can be directly added to the queue.");
            }

            var spoolFolder = _spoolerProvider.SpoolFolder;

            if (!_spoolFolderAccess.CanAccess())
            {
                throw new COMException("Accessing the spool folder failed.");
            }

            var isPdf      = fileExtension.EndsWith(".pdf");
            var fileHelper = isPdf ? _directConversionProvider.GetPdfConversion() : _directConversionProvider.GetPsConversion();

            var infFile = fileHelper.TransformToInfFile(path, spoolFolder);

            _jobInfoQueue.Add(_jobInfoManager.ReadFromInfFile(infFile));
        }
示例#3
0
        public void MoveOutputFiles()
        {
            //Ensure the the first file is the first in TempOutputFiles
            TempOutputFiles = TempOutputFiles.OrderBy(x => x).ToList();

            _outfilebody = DetermineOutfileBody();

            var isFirstFile = true;

            foreach (var tempOutputFile in TempOutputFiles)
            {
                var extension = PathSafe.GetExtension(tempOutputFile);
                var num       = DetermineNumWithDigits(tempOutputFile);

                _currentOutputFile = _outfilebody + num + extension;

                //first file in interactive workflow
                if (isFirstFile && !Profile.AutoSave.Enabled && OnRetypeOutputFilename != null)
                {
                    if (!CopyFileWithInteractiveOutputFilenameTemplateQuery(tempOutputFile, num, extension))
                    {
                        return; //cancelled by user
                    }
                }
                else
                {
                    lock (LockObject)
                    {
                        var uniqueFilename = new UniqueFilename(_currentOutputFile, DirectoryWrap, FileWrap);
                        if (Profile.AutoSave.Enabled && Profile.AutoSave.EnsureUniqueFilenames)
                        {
                            _currentOutputFile = EnsureUniqueFilename(uniqueFilename);
                        }

                        if (!CopyFile(tempOutputFile, _currentOutputFile))
                        {
                            _currentOutputFile = EnsureUniqueFilename(uniqueFilename);

                            if (!CopyFile(tempOutputFile, _currentOutputFile))
                            {
                                //Throw exception after second attempt to copy failes.
                                throw new DeviceException(
                                          "Error while copying to target file in second attempt. Process gets canceled.", 2);
                            }
                        }
                    }
                }

                DeleteFile(tempOutputFile);
                OutputFiles.Add(_currentOutputFile);
                isFirstFile = false;
            }

            OutputFiles = OutputFiles.OrderBy(x => x).ToList();
        }
示例#4
0
        /// <param name="originalFilename">Original file name</param>
        public UniqueFilenameBase(string originalFilename, IPathUtil pathUtil)
        {
            if (originalFilename == null)
            {
                throw new ArgumentNullException(nameof(originalFilename));
            }

            _pathUtil = pathUtil;

            OriginalFilename   = originalFilename;
            LastUniqueFilename = originalFilename;
            _directory         = _pathSafe.GetDirectoryName(OriginalFilename) ?? "";
            _fileBody          = _pathSafe.GetFileNameWithoutExtension(OriginalFilename);
            _extension         = _pathSafe.GetExtension(OriginalFilename);
        }
示例#5
0
        public UniqueFilename(string originalFilename, IDirectory directory, IFile file)
        {
            if (originalFilename == null)
            {
                throw new ArgumentNullException("originalFilename");
            }

            _directoryWrap = directory;
            _fileWrap      = file;

            OriginalFilename   = originalFilename;
            LastUniqueFilename = originalFilename;
            _directory         = _pathSafe.GetDirectoryName(OriginalFilename) ?? "";
            _fileBody          = _pathSafe.GetFileNameWithoutExtension(OriginalFilename);
            _extension         = _pathSafe.GetExtension(OriginalFilename);
        }
示例#6
0
        /// <summary>
        ///     Adds ellipsis "(...)" to a path with a length longer than 255.
        /// </summary>
        /// <param name="filePath">full path to file</param>
        /// <param name="length">maximum length of the string. This must be between 10 and MAX_PATH (260)</param>
        /// <returns>file path with ellipsis to ensure length under the max length </returns>
        public string EllipsisForPath(string filePath, int length)
        {
            if (filePath == null)
            {
                throw new ArgumentNullException(nameof(filePath));
            }

            if (filePath.EndsWith("\\"))
            {
                throw new ArgumentException("The path has to be a file", nameof(filePath));
            }

            if ((length < 10) || (length > MAX_PATH))
            {
                throw new ArgumentException($"The desired length must be between 10 and {MAX_PATH}", nameof(length));
            }

            if (filePath.Length > length)
            {
                const string ellipsis = "(...)";

                var path = GetLongDirectoryName(filePath) ?? "";
                var file = _pathSafe.GetFileNameWithoutExtension(filePath);
                var ext  = _pathSafe.GetExtension(filePath);

                var remainingLength = length - path.Length - ellipsis.Length - ext.Length - 1; // substract -1 to account for the slash between path and filename

                if (remainingLength < 4)
                {
                    throw new ArgumentException(filePath);
                }

                var partLength = remainingLength / 2;

                file     = file.Substring(0, partLength) + ellipsis + file.Substring(file.Length - partLength, partLength);
                filePath = _pathSafe.Combine(path, file + ext);
            }
            return(filePath);
        }