From 250c4034e04323b025cd39cd4641be8e04d431ce Mon Sep 17 00:00:00 2001 From: Ottermandias Date: Mon, 17 Jun 2024 14:50:33 +0200 Subject: [PATCH] Improve root directory behavior and AddMods. --- Penumbra/Api/Api/ModsApi.cs | 4 +++- Penumbra/Mods/Manager/ModManager.cs | 16 +++++++++------- Penumbra/UI/Tabs/SettingsTab.cs | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/Penumbra/Api/Api/ModsApi.cs b/Penumbra/Api/Api/ModsApi.cs index 548831d5..60b00d37 100644 --- a/Penumbra/Api/Api/ModsApi.cs +++ b/Penumbra/Api/Api/ModsApi.cs @@ -75,7 +75,9 @@ public class ModsApi : IPenumbraApiMods, IApiService, IDisposable if (!dir.Exists) return ApiHelpers.Return(PenumbraApiEc.FileMissing, args); - if (dir.Parent == null || Path.GetFullPath(_modManager.BasePath.FullName) != Path.GetFullPath(dir.Parent.FullName)) + if (dir.Parent == null + || Path.TrimEndingDirectorySeparator(Path.GetFullPath(_modManager.BasePath.FullName)) + != Path.TrimEndingDirectorySeparator(Path.GetFullPath(dir.Parent.FullName))) return ApiHelpers.Return(PenumbraApiEc.InvalidArgument, args); _modManager.AddMod(dir); diff --git a/Penumbra/Mods/Manager/ModManager.cs b/Penumbra/Mods/Manager/ModManager.cs index 010cad19..62b54865 100644 --- a/Penumbra/Mods/Manager/ModManager.cs +++ b/Penumbra/Mods/Manager/ModManager.cs @@ -47,15 +47,15 @@ public sealed class ModManager : ModStorage, IDisposable DataEditor = dataEditor; OptionEditor = optionEditor; Creator = creator; - SetBaseDirectory(config.ModDirectory, true); + SetBaseDirectory(config.ModDirectory, true, out _); _communicator.ModPathChanged.Subscribe(OnModPathChange, ModPathChanged.Priority.ModManager); DiscoverMods(); } /// Change the mod base directory and discover available mods. - public void DiscoverMods(string newDir) + public void DiscoverMods(string newDir, out string resultNewDir) { - SetBaseDirectory(newDir, false); + SetBaseDirectory(newDir, false, out resultNewDir); DiscoverMods(); } @@ -264,8 +264,9 @@ public sealed class ModManager : ModStorage, IDisposable /// If its not the first time, check if it is the same directory as before. /// Also checks if the directory is available and tries to create it if it is not. /// - private void SetBaseDirectory(string newPath, bool firstTime) + private void SetBaseDirectory(string newPath, bool firstTime, out string resultNewDir) { + resultNewDir = newPath; if (!firstTime && string.Equals(newPath, _config.ModDirectory, StringComparison.Ordinal)) return; @@ -278,7 +279,7 @@ public sealed class ModManager : ModStorage, IDisposable } else { - var newDir = new DirectoryInfo(newPath); + var newDir = new DirectoryInfo(Path.TrimEndingDirectorySeparator(newPath)); if (!newDir.Exists) try { @@ -290,8 +291,9 @@ public sealed class ModManager : ModStorage, IDisposable Penumbra.Log.Error($"Could not create specified mod directory {newDir.FullName}:\n{e}"); } - BasePath = newDir; - Valid = Directory.Exists(newDir.FullName); + BasePath = newDir; + Valid = Directory.Exists(newDir.FullName); + resultNewDir = BasePath.FullName; if (!firstTime && _config.ModDirectory != BasePath.FullName) TriggerModDirectoryChange(BasePath.FullName, Valid); } diff --git a/Penumbra/UI/Tabs/SettingsTab.cs b/Penumbra/UI/Tabs/SettingsTab.cs index 9989f90a..0de4f790 100644 --- a/Penumbra/UI/Tabs/SettingsTab.cs +++ b/Penumbra/UI/Tabs/SettingsTab.cs @@ -269,7 +269,7 @@ public class SettingsTab : ITab if (_config.ModDirectory != _newModDirectory && _newModDirectory.Length != 0 && DrawPressEnterWarning(_newModDirectory, _config.ModDirectory, pos, save, selected)) - _modManager.DiscoverMods(_newModDirectory); + _modManager.DiscoverMods(_newModDirectory, out _newModDirectory); } /// Draw the Open Directory and Rediscovery buttons.