From 6e351aa68b5903ff0b691eed43ed1c1d72ae65ff Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Mon, 12 Aug 2024 20:57:06 +0200 Subject: [PATCH] Make mods added via API migrate models if enabled. --- Penumbra/Api/Api/ModsApi.cs | 11 ++++++++++- Penumbra/Services/MigrationManager.cs | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Penumbra/Api/Api/ModsApi.cs b/Penumbra/Api/Api/ModsApi.cs index 790121d5..2acdf031 100644 --- a/Penumbra/Api/Api/ModsApi.cs +++ b/Penumbra/Api/Api/ModsApi.cs @@ -15,15 +15,17 @@ public class ModsApi : IPenumbraApiMods, IApiService, IDisposable private readonly ModImportManager _modImportManager; private readonly Configuration _config; private readonly ModFileSystem _modFileSystem; + private readonly MigrationManager _migrationManager; public ModsApi(ModManager modManager, ModImportManager modImportManager, Configuration config, ModFileSystem modFileSystem, - CommunicatorService communicator) + CommunicatorService communicator, MigrationManager migrationManager) { _modManager = modManager; _modImportManager = modImportManager; _config = config; _modFileSystem = modFileSystem; _communicator = communicator; + _migrationManager = migrationManager; _communicator.ModPathChanged.Subscribe(OnModPathChanged, ModPathChanged.Priority.ApiMods); } @@ -81,9 +83,16 @@ public class ModsApi : IPenumbraApiMods, IApiService, IDisposable return ApiHelpers.Return(PenumbraApiEc.InvalidArgument, args); _modManager.AddMod(dir); + if (_config.MigrateImportedModelsToV6) + { + _migrationManager.MigrateMdlDirectory(dir.FullName, false); + _migrationManager.Await(); + } + if (_config.UseFileSystemCompression) new FileCompactor(Penumbra.Log).StartMassCompact(dir.EnumerateFiles("*.*", SearchOption.AllDirectories), CompressionAlgorithm.Xpress8K); + return ApiHelpers.Return(PenumbraApiEc.Success, args); } diff --git a/Penumbra/Services/MigrationManager.cs b/Penumbra/Services/MigrationManager.cs index 7726f6fd..9041fbd0 100644 --- a/Penumbra/Services/MigrationManager.cs +++ b/Penumbra/Services/MigrationManager.cs @@ -63,6 +63,9 @@ public class MigrationManager(Configuration config) : IService public void CleanMtrlBackups(string path) => CleanBackups(path, "*.mtrl.bak", "material", MtrlCleanup, TaskType.MtrlCleanup); + public void Await() + => _currentTask?.Wait(); + private void CleanBackups(string path, string extension, string fileType, MigrationData data, TaskType type) { if (IsRunning)