From bca39984a1ce4b343a58222780c9ddd9e4d0ab68 Mon Sep 17 00:00:00 2001 From: Tobbert Date: Wed, 31 Jan 2024 22:41:36 +0100 Subject: [PATCH 01/94] ModManagerUI rewrite --- .../ModIoSystem/ModIoModFilesRegistry.cs | 45 ++++++++++--------- ModManagerUI/UiSystem/InstallController.cs | 16 +++---- .../UiSystem/ModFullInfoController.cs | 20 ++++----- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/ModManager/ModIoSystem/ModIoModFilesRegistry.cs b/ModManager/ModIoSystem/ModIoModFilesRegistry.cs index 784c661..709c454 100644 --- a/ModManager/ModIoSystem/ModIoModFilesRegistry.cs +++ b/ModManager/ModIoSystem/ModIoModFilesRegistry.cs @@ -9,39 +9,42 @@ namespace ModManager.ModIoSystem { public abstract class ModIoModFilesRegistry { - private static readonly Dictionary> ModIoModFiles = new(); + private static readonly Dictionary> ModIoModFiles1 = new(); + private static readonly object ModIoModFilesLock = new(); - public static IEnumerable Get(uint modId) + private static Dictionary> ModIoModFiles { - lock (ModIoModFiles) + get { - return ModIoModFiles.GetOrAdd(modId, () => Task.Run(() => RetrieveFiles(modId)).Result); + lock (ModIoModFilesLock) + { + return ModIoModFiles1; + } } } + + public static IReadOnlyList Get(uint modId) + { + return ModIoModFiles.GetOrAdd(modId, () => Task.Run(() => RetrieveFiles(modId)).Result); + } - public static Task> GetAsync(uint modId) + public static async Task> GetAsync(uint modId) { - lock (ModIoModFiles) - { - if (ModIoModFiles.TryGetValue(modId, out var files)) - return Task.FromResult(files); - ModIoModFiles.Add(modId, Task.Run(() => RetrieveFiles(modId)).Result); - return Task.FromResult(ModIoModFiles[modId]); - } + if (ModIoModFiles.TryGetValue(modId, out var files)) + return files; + ModIoModFiles.Add(modId, await RetrieveFiles(modId)); + return ModIoModFiles[modId]; } - public static Task> GetDescAsync(uint modId) + public static async Task> GetDescAsync(uint modId) { - lock (ModIoModFiles) - { - if (ModIoModFiles.TryGetValue(modId, out var files)) - return Task.FromResult>(files.OrderByDescending(file => file.Id).ToList().AsReadOnly()); - ModIoModFiles.Add(modId, Task.Run(() => RetrieveFiles(modId)).Result); - return Task.FromResult>(ModIoModFiles[modId].OrderByDescending(file => file.Id).ToList().AsReadOnly()); - } + if (ModIoModFiles.TryGetValue(modId, out var files)) + return files.OrderByDescending(file => file.Id).ToList().AsReadOnly(); + ModIoModFiles.Add(modId, await RetrieveFiles(modId)); + return ModIoModFiles[modId].OrderByDescending(file => file.Id).ToList().AsReadOnly(); } - private static async Task> RetrieveFiles(uint modId) + private static async Task> RetrieveFiles(uint modId) { return await ModIo.ModsClient[modId].Files.Search(FileFilter.Id.Desc()).ToList(); } diff --git a/ModManagerUI/UiSystem/InstallController.cs b/ModManagerUI/UiSystem/InstallController.cs index 7593491..b4d62fc 100644 --- a/ModManagerUI/UiSystem/InstallController.cs +++ b/ModManagerUI/UiSystem/InstallController.cs @@ -16,12 +16,10 @@ public class InstallController : Singleton public static async Task DownloadAndExtract(Mod mod, File? file) { - var modCard = ModCardRegistry.Get(mod); - modCard?.ModActionStarted(); try { file ??= mod.Modfile!; - var downloadedMod = await AddonService.Download(mod, file); + var downloadedMod = await ModManager.AddonSystem.AddonService.Instance.Download(mod, file); TryInstall(downloadedMod); } catch (MapException ex) @@ -36,7 +34,6 @@ public static async Task DownloadAndExtract(Mod mod, File? file) { ModManagerUIPlugin.Log.LogError($"{ex.Message}"); } - modCard?.ModActionStopped(); } public static async Task DownloadAndExtractWithDependencies(Mod mod) @@ -45,8 +42,6 @@ public static async Task DownloadAndExtractWithDependencies(Mod mod) await DownloadAndExtract(mod, file); await foreach (var dependency in AddonService.GetDependencies(mod)) { - if (dependency.IsInstalled()) - continue; var dependencyFile = await AddonService.TryGetCompatibleVersion(dependency.ModId, ModManagerPanel.CheckForHighestInsteadOfLive); var dependencyMod = ModIoModRegistry.Get(dependency.ModId); await DownloadAndExtract(dependencyMod, dependencyFile); @@ -62,10 +57,6 @@ public static void Uninstall(Mod mod) { AddonService.Uninstall(mod.Id); } - catch (IOException ex) - { - ModManagerUIPlugin.Log.LogWarning(ex.Message); - } catch (AddonException ex) { ModManagerUIPlugin.Log.LogWarning(ex.Message); @@ -76,6 +67,9 @@ public static void Uninstall(Mod mod) private static void TryInstall((string location, Mod Mod) mod) { + var modCard = ModCardRegistry.Get(mod.Mod); + modCard?.ModActionStarted(); + try { if (InstalledAddonRepository.Instance.TryGet(mod.Mod.Id, out var manifest) && manifest.Version != mod.Mod.Modfile.Version) @@ -102,6 +96,8 @@ private static void TryInstall((string location, Mod Mod) mod) ModManagerUIPlugin.Log.LogError(ex.StackTrace); throw ex; } + + modCard?.ModActionStopped(); } } } \ No newline at end of file diff --git a/ModManagerUI/UiSystem/ModFullInfoController.cs b/ModManagerUI/UiSystem/ModFullInfoController.cs index 5529e89..f2918a7 100644 --- a/ModManagerUI/UiSystem/ModFullInfoController.cs +++ b/ModManagerUI/UiSystem/ModFullInfoController.cs @@ -31,7 +31,6 @@ public class ModFullInfoController : IPanelController private Mod? _currentMod; private Dropdown? _versionsDropdown; - private DownloadButton? _downloadButton; public File? CurrentFile; @@ -96,19 +95,13 @@ public async void SetMod(Mod mod) : "-"; item.Q