1
0
mirror of https://github.com/Sonarr/Sonarr.git synced 2024-10-31 16:02:29 +01:00
Sonarr/NzbDrone.Update/UpdateEngine/InstallUpdateService.cs
kay.one d60b863e14 moved data from Roaming to ProgramData.
Cleaned up DiskProvider
2013-07-04 21:43:28 -07:00

84 lines
2.9 KiB
C#

using System;
using System.IO;
using NLog;
using NzbDrone.Common;
using NzbDrone.Common.EnvironmentInfo;
namespace NzbDrone.Update.UpdateEngine
{
public interface IInstallUpdateService
{
void Start(string installationFolder);
}
public class InstallUpdateService : IInstallUpdateService
{
private readonly IDiskProvider _diskProvider;
private readonly IDetectApplicationType _detectApplicationType;
private readonly ITerminateNzbDrone _terminateNzbDrone;
private readonly IAppFolderInfo _appFolderInfo;
private readonly IBackupAndRestore _backupAndRestore;
private readonly IStartNzbDrone _startNzbDrone;
private readonly Logger _logger;
public InstallUpdateService(IDiskProvider diskProvider, IDetectApplicationType detectApplicationType, ITerminateNzbDrone terminateNzbDrone,
IAppFolderInfo appFolderInfo, IBackupAndRestore backupAndRestore, IStartNzbDrone startNzbDrone, Logger logger)
{
_diskProvider = diskProvider;
_detectApplicationType = detectApplicationType;
_terminateNzbDrone = terminateNzbDrone;
_appFolderInfo = appFolderInfo;
_backupAndRestore = backupAndRestore;
_startNzbDrone = startNzbDrone;
_logger = logger;
}
private void Verify(string targetFolder)
{
_logger.Info("Verifying requirements before update...");
if (String.IsNullOrWhiteSpace(targetFolder))
throw new ArgumentException("Target folder can not be null or empty");
if (!_diskProvider.FolderExists(targetFolder))
throw new DirectoryNotFoundException("Target folder doesn't exist " + targetFolder);
_logger.Info("Verifying Update Folder");
if (!_diskProvider.FolderExists(_appFolderInfo.GetUpdatePackageFolder()))
throw new DirectoryNotFoundException("Update folder doesn't exist " + _appFolderInfo.GetUpdatePackageFolder());
}
public void Start(string installationFolder)
{
Verify(installationFolder);
var appType = _detectApplicationType.GetAppType();
try
{
_terminateNzbDrone.Terminate();
_backupAndRestore.BackUp(installationFolder);
_logger.Info("Moving update package to target");
try
{
_diskProvider.CopyFolder(_appFolderInfo.GetUpdatePackageFolder(), installationFolder);
}
catch (Exception e)
{
_backupAndRestore.Restore(installationFolder);
_logger.FatalException("Failed to copy upgrade package to target folder.", e);
}
}
finally
{
_startNzbDrone.Start(appType, installationFolder);
}
}
}
}