Improve root directory behavior and AddMods.

This commit is contained in:
Ottermandias 2024-06-17 14:50:33 +02:00
parent b3f8762494
commit 250c4034e0
3 changed files with 13 additions and 9 deletions

View file

@ -75,7 +75,9 @@ public class ModsApi : IPenumbraApiMods, IApiService, IDisposable
if (!dir.Exists) if (!dir.Exists)
return ApiHelpers.Return(PenumbraApiEc.FileMissing, args); 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); return ApiHelpers.Return(PenumbraApiEc.InvalidArgument, args);
_modManager.AddMod(dir); _modManager.AddMod(dir);

View file

@ -47,15 +47,15 @@ public sealed class ModManager : ModStorage, IDisposable
DataEditor = dataEditor; DataEditor = dataEditor;
OptionEditor = optionEditor; OptionEditor = optionEditor;
Creator = creator; Creator = creator;
SetBaseDirectory(config.ModDirectory, true); SetBaseDirectory(config.ModDirectory, true, out _);
_communicator.ModPathChanged.Subscribe(OnModPathChange, ModPathChanged.Priority.ModManager); _communicator.ModPathChanged.Subscribe(OnModPathChange, ModPathChanged.Priority.ModManager);
DiscoverMods(); DiscoverMods();
} }
/// <summary> Change the mod base directory and discover available mods. </summary> /// <summary> Change the mod base directory and discover available mods. </summary>
public void DiscoverMods(string newDir) public void DiscoverMods(string newDir, out string resultNewDir)
{ {
SetBaseDirectory(newDir, false); SetBaseDirectory(newDir, false, out resultNewDir);
DiscoverMods(); 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. /// 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. /// Also checks if the directory is available and tries to create it if it is not.
/// </summary> /// </summary>
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)) if (!firstTime && string.Equals(newPath, _config.ModDirectory, StringComparison.Ordinal))
return; return;
@ -278,7 +279,7 @@ public sealed class ModManager : ModStorage, IDisposable
} }
else else
{ {
var newDir = new DirectoryInfo(newPath); var newDir = new DirectoryInfo(Path.TrimEndingDirectorySeparator(newPath));
if (!newDir.Exists) if (!newDir.Exists)
try try
{ {
@ -290,8 +291,9 @@ public sealed class ModManager : ModStorage, IDisposable
Penumbra.Log.Error($"Could not create specified mod directory {newDir.FullName}:\n{e}"); Penumbra.Log.Error($"Could not create specified mod directory {newDir.FullName}:\n{e}");
} }
BasePath = newDir; BasePath = newDir;
Valid = Directory.Exists(newDir.FullName); Valid = Directory.Exists(newDir.FullName);
resultNewDir = BasePath.FullName;
if (!firstTime && _config.ModDirectory != BasePath.FullName) if (!firstTime && _config.ModDirectory != BasePath.FullName)
TriggerModDirectoryChange(BasePath.FullName, Valid); TriggerModDirectoryChange(BasePath.FullName, Valid);
} }

View file

@ -269,7 +269,7 @@ public class SettingsTab : ITab
if (_config.ModDirectory != _newModDirectory if (_config.ModDirectory != _newModDirectory
&& _newModDirectory.Length != 0 && _newModDirectory.Length != 0
&& DrawPressEnterWarning(_newModDirectory, _config.ModDirectory, pos, save, selected)) && DrawPressEnterWarning(_newModDirectory, _config.ModDirectory, pos, save, selected))
_modManager.DiscoverMods(_newModDirectory); _modManager.DiscoverMods(_newModDirectory, out _newModDirectory);
} }
/// <summary> Draw the Open Directory and Rediscovery buttons.</summary> /// <summary> Draw the Open Directory and Rediscovery buttons.</summary>