Create permanent backup before migrating collections.

This commit is contained in:
Ottermandias 2024-05-04 11:19:07 +02:00
parent 36fc251d5b
commit 2a5df2dfb0
3 changed files with 28 additions and 4 deletions

View file

@ -136,7 +136,7 @@ public class Configuration : IPluginConfiguration, ISavable
/// <summary> Contains some default values or boundaries for config values. </summary>
public static class Constants
{
public const int CurrentVersion = 8;
public const int CurrentVersion = 9;
public const float MaxAbsoluteSize = 600;
public const int DefaultAbsoluteSize = 250;
public const float MinAbsoluteSize = 50;

View file

@ -7,6 +7,10 @@ namespace Penumbra.Services;
public class BackupService : IAsyncService
{
private readonly Logger _logger;
private readonly DirectoryInfo _configDirectory;
private readonly IReadOnlyList<FileInfo> _fileNames;
/// <inheritdoc/>
public Task Awaiter { get; }
@ -17,10 +21,16 @@ public class BackupService : IAsyncService
/// <summary> Start a backup process on the collected files. </summary>
public BackupService(Logger logger, FilenameService fileNames)
{
var files = PenumbraFiles(fileNames);
Awaiter = Task.Run(() => Backup.CreateAutomaticBackup(logger, new DirectoryInfo(fileNames.ConfigDirectory), files));
_logger = logger;
_fileNames = PenumbraFiles(fileNames);
_configDirectory = new DirectoryInfo(fileNames.ConfigDirectory);
Awaiter = Task.Run(() => Backup.CreateAutomaticBackup(logger, new DirectoryInfo(fileNames.ConfigDirectory), _fileNames));
}
/// <summary> Create a permanent backup with a given name for migrations. </summary>
public void CreateMigrationBackup(string name)
=> Backup.CreatePermanentBackup(_logger, _configDirectory, _fileNames, name);
/// <summary> Collect all relevant files for penumbra configuration. </summary>
private static IReadOnlyList<FileInfo> PenumbraFiles(FilenameService fileNames)
{

View file

@ -22,7 +22,7 @@ namespace Penumbra.Services;
/// Contains everything to migrate from older versions of the config to the current,
/// including deprecated fields.
/// </summary>
public class ConfigMigrationService(SaveService saveService) : IService
public class ConfigMigrationService(SaveService saveService, BackupService backupService) : IService
{
private Configuration _config = null!;
private JObject _data = null!;
@ -73,9 +73,23 @@ public class ConfigMigrationService(SaveService saveService) : IService
Version5To6();
Version6To7();
Version7To8();
Version8To9();
AddColors(config, true);
}
// Migrate to ephemeral config.
private void Version8To9()
{
if (_config.Version != 8)
return;
backupService.CreateMigrationBackup("pre_collection_identifiers");
_config.Version = 9;
_config.Ephemeral.Version = 9;
_config.Save();
_config.Ephemeral.Save();
}
// Migrate to ephemeral config.
private void Version7To8()
{