From 0cb0bff7144628fdc2490ba8e9bd23e03a3b2213 Mon Sep 17 00:00:00 2001 From: goat <16760685+goaaats@users.noreply.github.com> Date: Thu, 15 Jul 2021 04:01:26 +0200 Subject: [PATCH] fix(PluginInstallerWindow): use task for single update, correct error handling --- .../Internal/Windows/PluginInstallerWindow.cs | 35 +++++++++++++++---- Dalamud/Plugin/Internal/PluginManager.cs | 2 +- 2 files changed, 30 insertions(+), 7 deletions(-) diff --git a/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs index ecc2e8dee..7908c7004 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs @@ -787,7 +787,22 @@ namespace Dalamud.Interface.Internal.Windows if (ImGuiComponents.IconButton(FontAwesomeIcon.Download)) { - this.dalamud.PluginManager.UpdateSinglePlugin(update, false); + this.installStatus = OperationStatus.InProgress; + + Task.Run(() => this.dalamud.PluginManager.UpdateSinglePlugin(update, false)) + .ContinueWith(task => + { + // There is no need to set as Complete for an individual plugin installation + this.installStatus = OperationStatus.Idle; + + var errorMessage = Locs.ErrorModal_SingleUpdateFail(update.UpdateManifest.Name); + this.DisplayErrorContinuation(task, errorMessage); + + if (!task.Result.WasUpdated) + { + ShowErrorModal(errorMessage); + } + }); } if (ImGui.IsItemHovered()) @@ -986,7 +1001,7 @@ namespace Dalamud.Interface.Internal.Windows { if (task.IsFaulted) { - this.errorModalMessage = state as string; + var errorModalMessage = state as string; foreach (var ex in task.Exception.InnerExceptions) { @@ -995,7 +1010,7 @@ namespace Dalamud.Interface.Internal.Windows Log.Error(ex, "Plugin installer threw an error"); #if DEBUG if (!string.IsNullOrEmpty(ex.Message)) - this.errorModalMessage += $"\n\n{ex.Message}"; + errorModalMessage += $"\n\n{ex.Message}"; #endif } else @@ -1003,13 +1018,12 @@ namespace Dalamud.Interface.Internal.Windows Log.Error(ex, "Plugin installer threw an unexpected error"); #if DEBUG if (!string.IsNullOrEmpty(ex.Message)) - this.errorModalMessage += $"\n\n{ex.Message}"; + errorModalMessage += $"\n\n{ex.Message}"; #endif } } - this.errorModalDrawing = true; - this.errorModalOnNextFrame = true; + this.ShowErrorModal(errorModalMessage); return false; } @@ -1017,6 +1031,13 @@ namespace Dalamud.Interface.Internal.Windows return true; } + private void ShowErrorModal(string message) + { + this.errorModalMessage = message; + this.errorModalDrawing = true; + this.errorModalOnNextFrame = true; + } + [SuppressMessage("StyleCop.CSharp.OrderingRules", "SA1201:Elements should appear in the correct order", Justification = "Disregard here")] private static class Locs { @@ -1176,6 +1197,8 @@ namespace Dalamud.Interface.Internal.Windows public static string ErrorModal_InstallFail(string name) => Loc.Localize("InstallerInstallFail", "Failed to install plugin {0}.").Format(name); + public static string ErrorModal_SingleUpdateFail(string name) => Loc.Localize("InstallerSingleUpdateFail", "Failed to update plugin {0}.").Format(name); + public static string ErrorModal_EnableFail(string name) => Loc.Localize("InstallerEnableFail", "Failed to enable plugin {0}.").Format(name); public static string ErrorModal_DisableFail(string name) => Loc.Localize("InstallerDisableFail", "Failed to disable plugin {0}.").Format(name); diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index 4a70a0a25..c20deb177 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -635,7 +635,7 @@ namespace Dalamud.Plugin.Internal { InternalName = plugin.Manifest.InternalName, Name = plugin.Manifest.Name, - Version = metadata.UseTesting ? metadata.UpdateManifest.TestingAssemblyVersion : metadata.UpdateManifest.AssemblyVersion + Version = metadata.UseTesting ? metadata.UpdateManifest.TestingAssemblyVersion : metadata.UpdateManifest.AssemblyVersion, }; if (dryRun)