public bool ProcessStorageReadyBackupEntry(BackupHistoryEntry backupEntryToStorage)
        {
            try
              {
            if (!backupEntryToStorage.StoragePendingFilesPaths.Any())
            {
              _log.Debug("No files to store.");

              return true;
            }

            var relativeFtpBackupDirectory =
              _settingsProvider.GetSetting<string>("RelativeFtpBackupDirectory").TrimEnd('/', '\\');

            using (var ftpClient = new FtpClient())
            {
              ftpClient.DataConnectionType = _dataConnectionType;

              ftpClient.Host = _settingsProvider.GetSetting<string>("FtpHost");
              ftpClient.Port = _settingsProvider.GetSetting<int>("FtpPort");

              ftpClient.Credentials =
            new NetworkCredential(
              _settingsProvider.GetSetting<string>("FtpUsername"),
              _settingsProvider.GetSetting<string>("FtpPassword"));

              _log.Info("Connecting to FTP server (" + ftpClient.Host + ":" + ftpClient.Port + ")...");

              ftpClient.Connect();

              var ftpBackupPath =
            string.Format(
              "{0}/{1} {2} Backup",
              relativeFtpBackupDirectory,
              backupEntryToStorage.CompressStarted.ToString("yyyyMMdd_HHmmss"),
              backupEntryToStorage.BackupType);

              ftpClient.CreateDirectory(ftpBackupPath);

              //  Upload compressed backups to FTP server
              foreach (var storagePendingFilePath in backupEntryToStorage.StoragePendingFilesPaths)
              {
            UploadBackupFile(ftpClient, ftpBackupPath, storagePendingFilePath);
              }

              //  Removed already uploaded backup files
              foreach (var storagePendingFilePath in backupEntryToStorage.StoragePendingFilesPaths)
              {
            File.Delete(storagePendingFilePath);
              }

              _log.Info("Finished uploading files to the FTP server.");
            }

            return true;
              }
              catch (Exception e)
              {
            _log.Error("Failed to upload files to FTP server.", e);

            return false;
              }
        }
        public void UpdateBackupHistoryEntry(BackupHistoryEntry backupEntryToStorage)
        {
            lock (_backupHistoryFileLock)
              {
            var document = _backupHistoryDocument.Value;

            if (document.Root == null)
              throw new Exception("Root element is missing.");

            var oldBackupEntry =
              document.Root
            .Elements("Backup")
            .FirstOrDefault(x => long.Parse(x.NotNullAttribute("id").Value) == backupEntryToStorage.Id);

            if (oldBackupEntry == null)
              throw new Exception("Could not find backup history entry to update (" + backupEntryToStorage.Id + ").");

            oldBackupEntry.ReplaceWith(backupEntryToStorage.ToXElement());

            document.Save(_backupHistoryFilePath);

            InitializeBackupHistoryCache();
              }
        }