You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Lidarr/src/NzbDrone.Core/Datastore/DatabaseRestorationService.cs

57 lines
1.6 KiB

using System;
using NLog;
using NzbDrone.Common.Disk;
using NzbDrone.Common.EnvironmentInfo;
using NzbDrone.Common.Extensions;
using NzbDrone.Common.Instrumentation;
namespace NzbDrone.Core.Datastore
{
public interface IRestoreDatabase
{
void Restore();
}
public class DatabaseRestorationService : IRestoreDatabase
{
private readonly IDiskProvider _diskProvider;
private readonly IAppFolderInfo _appFolderInfo;
private static readonly Logger Logger = NzbDroneLogger.GetLogger(typeof(DatabaseRestorationService));
public DatabaseRestorationService(IDiskProvider diskProvider, IAppFolderInfo appFolderInfo)
{
_diskProvider = diskProvider;
_appFolderInfo = appFolderInfo;
}
public void Restore()
{
var dbRestorePath = _appFolderInfo.GetDatabaseRestore();
if (!_diskProvider.FileExists(dbRestorePath))
{
return;
}
try
{
Logger.Info("Restoring Database");
var dbPath = _appFolderInfo.GetDatabase();
_diskProvider.DeleteFile(dbPath + "-shm");
_diskProvider.DeleteFile(dbPath + "-wal");
_diskProvider.DeleteFile(dbPath + "-journal");
_diskProvider.DeleteFile(dbPath);
_diskProvider.MoveFile(dbRestorePath, dbPath);
}
catch (Exception e)
{
Logger.Error(e, "Failed to restore database");
throw;
}
}
}
}