mirror of https://github.com/lidarr/Lidarr
57 lines
1.6 KiB
C#
57 lines
1.6 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|