From f8966318c86c8e678a358b2a6465228922455f0f Mon Sep 17 00:00:00 2001 From: Aireil <33433913+Aireil@users.noreply.github.com> Date: Fri, 8 Oct 2021 23:38:00 +0200 Subject: [PATCH] feat: add ban reason in the installer --- .../Internal/Windows/PluginInstallerWindow.cs | 10 ++++++++-- Dalamud/Plugin/Internal/LocalPlugin.cs | 6 ++++++ Dalamud/Plugin/Internal/PluginManager.cs | 13 +++++++++++++ 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs index d8544a1e4..f266c4098 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstallerWindow.cs @@ -1430,7 +1430,7 @@ namespace Dalamud.Interface.Internal.Windows ImGui.TextWrapped(manifest.Description); } - if (plugin.IsOutdated) + if (plugin.IsOutdated && !plugin.IsBanned) { ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudRed); ImGui.TextWrapped(Locs.PluginBody_Outdated); @@ -1440,7 +1440,10 @@ namespace Dalamud.Interface.Internal.Windows if (plugin.IsBanned) { ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudRed); - ImGui.TextWrapped(Locs.PluginBody_Banned); + ImGui.TextWrapped(plugin.BanReason.IsNullOrEmpty() + ? Locs.PluginBody_Banned + : Locs.PluginBody_BannedReason(plugin.BanReason)); + ImGui.PopStyleColor(); } @@ -2436,6 +2439,9 @@ namespace Dalamud.Interface.Internal.Windows public static string PluginBody_Banned => Loc.Localize("InstallerBannedPluginBody ", "This plugin version is banned due to incompatibilities and not available at the moment. Please wait for it to be updated by its author."); + public static string PluginBody_BannedReason(string message) => + Loc.Localize("InstallerBannedPluginBodyReason ", "This plugin is banned: {0}").Format(message); + #endregion #region Plugin buttons diff --git a/Dalamud/Plugin/Internal/LocalPlugin.cs b/Dalamud/Plugin/Internal/LocalPlugin.cs index 8207b08e6..4a17f8369 100644 --- a/Dalamud/Plugin/Internal/LocalPlugin.cs +++ b/Dalamud/Plugin/Internal/LocalPlugin.cs @@ -132,6 +132,7 @@ namespace Dalamud.Plugin.Internal var pluginManager = Service.Get(); this.IsBanned = pluginManager.IsManifestBanned(this.Manifest); + this.BanReason = pluginManager.GetBanReason(this.Manifest); this.SaveManifest(); } @@ -167,6 +168,11 @@ namespace Dalamud.Plugin.Internal /// public string Name => this.instance?.Name ?? this.Manifest.Name ?? this.DllFile.Name; + /// + /// Gets an optional reason, if the plugin is banned. + /// + public string BanReason { get; } + /// /// Gets a value indicating whether the plugin is loaded and running. /// diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index 31794aaa8..1f2798feb 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -954,6 +954,16 @@ namespace Dalamud.Plugin.Internal return this.bannedPlugins.Any(ban => ban.Name == manifest.InternalName && ban.AssemblyVersion == manifest.AssemblyVersion); } + /// + /// Get the reason of a banned plugin by inspecting the manifest. + /// + /// Manifest to inspect. + /// The reason of the ban, if any. + public string GetBanReason(PluginManifest manifest) + { + return this.bannedPlugins.FirstOrDefault(ban => ban.Name == manifest.InternalName).Reason; + } + private void DetectAvailablePluginUpdates() { var updatablePlugins = new List(); @@ -1024,6 +1034,9 @@ namespace Dalamud.Plugin.Internal [JsonProperty] public Version AssemblyVersion { get; private set; } + + [JsonProperty] + public string Reason { get; private set; } } private struct PluginDef