aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIsaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com>2024-01-29 22:14:19 +0000
committerGitHub <noreply@github.com>2024-01-29 23:14:19 +0100
commitbb4a28b5254a964a99af14d6a8bd473ccbbf5778 (patch)
tree9e418a9183046ec05d871d0fcce67009478ce169
parenta8fbcdae9f505577685a4afed464a58b568e8cd9 (diff)
Ava UI: Mod Manager Fixes (Again) (#6187)1.1.1148
* Fix typo + Fix deleting from old dir * Avoid double enumeration * Break when parentDir is found * Fix deleting non subdirectory mods * Typo
-rw-r--r--src/Ryujinx.Ava/UI/Models/ModModel.cs4
-rw-r--r--src/Ryujinx.Ava/UI/ViewModels/ModManagerViewModel.cs54
2 files changed, 37 insertions, 21 deletions
diff --git a/src/Ryujinx.Ava/UI/Models/ModModel.cs b/src/Ryujinx.Ava/UI/Models/ModModel.cs
index f68e1593..ee28ca5f 100644
--- a/src/Ryujinx.Ava/UI/Models/ModModel.cs
+++ b/src/Ryujinx.Ava/UI/Models/ModModel.cs
@@ -17,14 +17,16 @@ namespace Ryujinx.Ava.UI.Models
}
}
+ public bool InSd { get; }
public string Path { get; }
public string Name { get; }
- public ModModel(string path, string name, bool enabled)
+ public ModModel(string path, string name, bool enabled, bool inSd)
{
Path = path;
Name = name;
Enabled = enabled;
+ InSd = inSd;
}
}
}
diff --git a/src/Ryujinx.Ava/UI/ViewModels/ModManagerViewModel.cs b/src/Ryujinx.Ava/UI/ViewModels/ModManagerViewModel.cs
index 2c29660b..8321bf89 100644
--- a/src/Ryujinx.Ava/UI/ViewModels/ModManagerViewModel.cs
+++ b/src/Ryujinx.Ava/UI/ViewModels/ModManagerViewModel.cs
@@ -102,13 +102,14 @@ namespace Ryujinx.Ava.UI.ViewModels
foreach (var path in modsBasePaths)
{
+ var inSd = path == ModLoader.GetSdModsBasePath();
var modCache = new ModLoader.ModCache();
ModLoader.QueryContentsDir(modCache, new DirectoryInfo(Path.Combine(path, "contents")), applicationId);
foreach (var mod in modCache.RomfsDirs)
{
- var modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled);
+ var modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd);
if (Mods.All(x => x.Path != mod.Path.Parent.FullName))
{
Mods.Add(modModel);
@@ -117,12 +118,12 @@ namespace Ryujinx.Ava.UI.ViewModels
foreach (var mod in modCache.RomfsContainers)
{
- Mods.Add(new ModModel(mod.Path.FullName, mod.Name, mod.Enabled));
+ Mods.Add(new ModModel(mod.Path.FullName, mod.Name, mod.Enabled, inSd));
}
foreach (var mod in modCache.ExefsDirs)
{
- var modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled);
+ var modModel = new ModModel(mod.Path.Parent.FullName, mod.Name, mod.Enabled, inSd);
if (Mods.All(x => x.Path != mod.Path.Parent.FullName))
{
Mods.Add(modModel);
@@ -131,7 +132,7 @@ namespace Ryujinx.Ava.UI.ViewModels
foreach (var mod in modCache.ExefsContainers)
{
- Mods.Add(new ModModel(mod.Path.FullName, mod.Name, mod.Enabled));
+ Mods.Add(new ModModel(mod.Path.FullName, mod.Name, mod.Enabled, inSd));
}
}
@@ -183,30 +184,43 @@ namespace Ryujinx.Ava.UI.ViewModels
public void Delete(ModModel model)
{
- var modsDir = ModLoader.GetApplicationDir(ModLoader.GetSdModsBasePath(), _applicationId.ToString("x16"));
- var parentDir = String.Empty;
+ var isSubdir = true;
+ var pathToDelete = model.Path;
+ var basePath = model.InSd ? ModLoader.GetSdModsBasePath() : ModLoader.GetModsBasePath();
+ var modsDir = ModLoader.GetApplicationDir(basePath, _applicationId.ToString("x16"));
- foreach (var dir in Directory.GetDirectories(modsDir, "*", SearchOption.TopDirectoryOnly))
+ if (new DirectoryInfo(model.Path).Parent?.FullName == modsDir)
{
- if (Directory.GetDirectories(dir, "*", SearchOption.AllDirectories).Contains(model.Path))
- {
- parentDir = dir;
- }
+ isSubdir = false;
}
- if (parentDir == String.Empty)
+ if (isSubdir)
{
- Dispatcher.UIThread.Post(async () =>
+ var parentDir = String.Empty;
+
+ foreach (var dir in Directory.GetDirectories(modsDir, "*", SearchOption.TopDirectoryOnly))
{
- await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance.UpdateAndGetDynamicValue(
- LocaleKeys.DialogModDeleteNoParentMessage,
- parentDir));
- });
- return;
+ if (Directory.GetDirectories(dir, "*", SearchOption.AllDirectories).Contains(model.Path))
+ {
+ parentDir = dir;
+ break;
+ }
+ }
+
+ if (parentDir == String.Empty)
+ {
+ Dispatcher.UIThread.Post(async () =>
+ {
+ await ContentDialogHelper.CreateErrorDialog(LocaleManager.Instance.UpdateAndGetDynamicValue(
+ LocaleKeys.DialogModDeleteNoParentMessage,
+ model.Path));
+ });
+ return;
+ }
}
- Logger.Info?.Print(LogClass.Application, $"Deleting mod at \"{model.Path}\"");
- Directory.Delete(parentDir, true);
+ Logger.Info?.Print(LogClass.Application, $"Deleting mod at \"{pathToDelete}\"");
+ Directory.Delete(pathToDelete, true);
Mods.Remove(model);
OnPropertyChanged(nameof(ModCount));