diff --git a/Penumbra/Configuration.cs b/Penumbra/Configuration.cs
index 98668e8a..a065bc26 100644
--- a/Penumbra/Configuration.cs
+++ b/Penumbra/Configuration.cs
@@ -136,7 +136,7 @@ public class Configuration : IPluginConfiguration, ISavable
/// Contains some default values or boundaries for config values.
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;
diff --git a/Penumbra/Services/BackupService.cs b/Penumbra/Services/BackupService.cs
index bd5b3bcc..88b99de1 100644
--- a/Penumbra/Services/BackupService.cs
+++ b/Penumbra/Services/BackupService.cs
@@ -7,6 +7,10 @@ namespace Penumbra.Services;
public class BackupService : IAsyncService
{
+ private readonly Logger _logger;
+ private readonly DirectoryInfo _configDirectory;
+ private readonly IReadOnlyList _fileNames;
+
///
public Task Awaiter { get; }
@@ -17,10 +21,16 @@ public class BackupService : IAsyncService
/// Start a backup process on the collected files.
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));
}
+ /// Create a permanent backup with a given name for migrations.
+ public void CreateMigrationBackup(string name)
+ => Backup.CreatePermanentBackup(_logger, _configDirectory, _fileNames, name);
+
/// Collect all relevant files for penumbra configuration.
private static IReadOnlyList PenumbraFiles(FilenameService fileNames)
{
diff --git a/Penumbra/Services/ConfigMigrationService.cs b/Penumbra/Services/ConfigMigrationService.cs
index fafaa0e5..1f6ac170 100644
--- a/Penumbra/Services/ConfigMigrationService.cs
+++ b/Penumbra/Services/ConfigMigrationService.cs
@@ -22,7 +22,7 @@ namespace Penumbra.Services;
/// Contains everything to migrate from older versions of the config to the current,
/// including deprecated fields.
///
-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()
{