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.