using NLog; using NzbDrone.Common.Disk; using NzbDrone.Common.EnvironmentInfo; using NzbDrone.Common.Extensions; namespace NzbDrone.Update.UpdateEngine { public interface IBackupAndRestore { void Backup(string source); void Restore(string target); } public class BackupAndRestore : IBackupAndRestore { private readonly IDiskTransferService _diskTransferService; private readonly IAppFolderInfo _appFolderInfo; private readonly Logger _logger; public BackupAndRestore(IDiskTransferService diskTransferService, IAppFolderInfo appFolderInfo, Logger logger) { _diskTransferService = diskTransferService; _appFolderInfo = appFolderInfo; _logger = logger; } public void Backup(string source) { _logger.Info("Creating backup of existing installation"); _diskTransferService.MirrorFolder(source, _appFolderInfo.GetUpdateBackUpFolder()); } public void Restore(string target) { _logger.Info("Attempting to rollback upgrade"); var count = _diskTransferService.MirrorFolder(_appFolderInfo.GetUpdateBackUpFolder(), target); _logger.Info("Rolled back {0} files", count); } } }