예제 #1
0
        public JsonResult RenamePendingProcessing(string path)
        {
            path = path.Replace('|', Path.DirectorySeparatorChar).Replace('^', Path.VolumeSeparatorChar).Replace('`', '\'');

            var di      = new DirectoryInfo(path);
            var dropDir = di.Parent.FullName;
            var folder  = di.Name;

            if (!folder.StartsWith("_UNPACK_") && !folder.StartsWith("_FAILED_"))
            {
                return new JsonResult {
                           Data = "no change"
                }
            }
            ;

            folder = folder.Substring(8);
            var newPath = dropDir + Path.DirectorySeparatorChar + folder;

            _diskProvider.MoveDirectory(path, newPath);

            return(new JsonResult {
                Data = "ok"
            });
        }
        public virtual void DeleteDirectory(string path)
        {
            logger.Trace("Attempting to send '{0}' to recycling bin", path);
            var recyclingBin = _configProvider.RecycleBin;

            if (String.IsNullOrWhiteSpace(recyclingBin))
            {
                logger.Info("Recycling Bin has not been configured, deleting permanently. {0}", path);
                _diskProvider.DeleteFolder(path, true);
                logger.Trace("Folder has been permanently deleted: {0}", path);
            }

            else
            {
                var destination = Path.Combine(recyclingBin, new DirectoryInfo(path).Name);

                logger.Trace("Moving '{0}' to '{1}'", path, destination);
                _diskProvider.MoveDirectory(path, destination);

                logger.Trace("Setting last accessed: {0}", path);
                _diskProvider.DirectorySetLastWriteTimeUtc(destination, DateTime.UtcNow);
                foreach (var file in _diskProvider.GetFiles(destination, SearchOption.AllDirectories))
                {
                    _diskProvider.FileSetLastWriteTimeUtc(file, DateTime.UtcNow);
                }

                logger.Trace("Folder has been moved to the recycling bin: {0}", destination);
            }
        }
예제 #3
0
        public void MoveFolder_should_overright_existing_folder()
        {
            var diskProvider = new DiskProvider();

            diskProvider.CopyDirectory(BinFolder.FullName, BinFolderCopy.FullName);
            diskProvider.CopyDirectory(BinFolder.FullName, BinFolderMove.FullName);
            VerifyCopy();

            //Act
            diskProvider.MoveDirectory(BinFolderCopy.FullName, BinFolderMove.FullName);

            //Assert
            VerifyMove();
        }
예제 #4
0
        public virtual void Start(ProgressNotification notification, dynamic options)
        {
            notification.CurrentMessage = "Checking for updates";

            var updatePackage = _updateProvider.GetAvilableUpdate(_environmentProvider.Version);

            //No updates available
            if (updatePackage == null)
            {
                return;
            }

            var packageDestination = Path.Combine(_environmentProvider.GetUpdateSandboxFolder(), updatePackage.FileName);

            if (_diskProvider.FolderExists(_environmentProvider.GetUpdateSandboxFolder()))
            {
                logger.Info("Deleting old update files");
                _diskProvider.DeleteFolder(_environmentProvider.GetUpdateSandboxFolder(), true);
            }

            logger.Info("Downloading update package from [{0}] to [{1}]", updatePackage.Url, packageDestination);
            notification.CurrentMessage = "Downloading Update " + updatePackage.Version;
            _httpProvider.DownloadFile(updatePackage.Url, packageDestination);
            logger.Info("Download completed for update package from [{0}]", updatePackage.FileName);

            logger.Info("Extracting Update package");
            notification.CurrentMessage = "Extracting Update";
            _archiveProvider.ExtractArchive(packageDestination, _environmentProvider.GetUpdateSandboxFolder());
            logger.Info("Update package extracted successfully");

            logger.Info("Preparing client");
            notification.CurrentMessage = "Preparing to start Update";
            _diskProvider.MoveDirectory(_environmentProvider.GetUpdateClientFolder(), _environmentProvider.GetUpdateSandboxFolder());


            logger.Info("Starting update client");
            var startInfo = new ProcessStartInfo
            {
                FileName  = _environmentProvider.GetUpdateClientExePath(),
                Arguments = string.Format("{0} {1}", _environmentProvider.NzbDroneProcessIdFromEnviroment, _configFileProvider.Guid)
            };

            var process = _processProvider.Start(startInfo);

            notification.CurrentMessage = "Update in progress. NzbDrone will restart shortly.";

            _processProvider.WaitForExit(process);
        }
        private void TagFolder(DirectoryInfo directory, PostDownloadStatusType status)
        {
            //Turning off tagging folder for now, to stop messing people's series folders.
            return;

            var target = GetTaggedFolderName(directory, status);

            if (!DiskProvider.PathEquals(target, directory.FullName))
            {
                Logger.Warn("Unable to download [{0}]. Status: {1}", directory.Name, status);
                _diskProvider.MoveDirectory(directory.FullName, target);
            }
            else
            {
                Logger.Debug("Unable to download [{0}], {1}", directory.Name, status);
            }
        }
예제 #6
0
        public void MoveFolder_should_overright_existing_folder()
        {
            var diskProvider = new DiskProvider();

            diskProvider.CopyDirectory(BinFolder.FullName, BinFolderCopy.FullName);
            diskProvider.CopyDirectory(BinFolder.FullName, BinFolderMove.FullName);
            VerifyCopy();

            //Act
            diskProvider.MoveDirectory(BinFolderCopy.FullName, BinFolderMove.FullName);

            //Assert
            VerifyMove();
        }