diff --git a/Dalamud/Interface/Internal/PluginCategoryManager.cs b/Dalamud/Interface/Internal/PluginCategoryManager.cs index 71c869ede..d3aea7f57 100644 --- a/Dalamud/Interface/Internal/PluginCategoryManager.cs +++ b/Dalamud/Interface/Internal/PluginCategoryManager.cs @@ -294,7 +294,7 @@ internal class PluginCategoryManager } } - if (PluginManager.HasTestingVersion(manifest) || manifest.IsTestingExclusive) + if (manifest.IsTestingExclusive || manifest.IsAvailableForTesting) categoryList.Add(CategoryKind.AvailableForTesting); // always add, even if empty diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index 946a5f19a..dc41e9588 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -2593,8 +2593,7 @@ internal class PluginInstallerWindow : Window, IDisposable var configuration = Service.Get(); var pluginManager = Service.Get(); - var hasTestingVersionAvailable = configuration.DoPluginTest && - PluginManager.HasTestingVersion(manifest); + var hasTestingVersionAvailable = configuration.DoPluginTest && manifest.IsAvailableForTesting; if (ImGui.BeginPopupContextItem("ItemContextMenu"u8)) { @@ -2689,8 +2688,7 @@ internal class PluginInstallerWindow : Window, IDisposable label += Locs.PluginTitleMod_TestingVersion; } - var hasTestingAvailable = this.pluginListAvailable.Any(x => x.InternalName == plugin.InternalName && - x.IsAvailableForTesting); + var hasTestingAvailable = this.pluginListAvailable.Any(x => x.InternalName == plugin.InternalName && x.IsAvailableForTesting); if (hasTestingAvailable && configuration.DoPluginTest && testingOptIn == null) { label += Locs.PluginTitleMod_TestingAvailable; diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index db803caa8..52c7689a8 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -278,26 +278,6 @@ internal class PluginManager : IInternalDisposableService return !manifest.IsHide; } - /// - /// Check if a manifest even has an available testing version. - /// - /// The manifest to test. - /// Whether a testing version is available. - public static bool HasTestingVersion(IPluginManifest manifest) - { - var av = manifest.AssemblyVersion; - var tv = manifest.TestingAssemblyVersion; - var hasTv = tv != null; - - if (hasTv) - { - return tv > av && - manifest.TestingDalamudApiLevel == DalamudApiLevel; - } - - return false; - } - /// /// Get a disposable that will lock plugin lists while it is not disposed. /// You must NEVER use this in async code. @@ -371,6 +351,20 @@ internal class PluginManager : IInternalDisposableService return this.configuration.PluginTestingOptIns!.Any(x => x.InternalName == manifest.InternalName); } + /// + /// For a given manifest, determine if the testing version can be used over the normal version. + /// The higher of the two versions is calculated after checking other settings. + /// + /// Manifest to check. + /// A value indicating whether testing can be used. + public bool CanUseTesting(IPluginManifest manifest) + { + if (!this.configuration.DoPluginTest) + return false; + + return manifest.IsTestingExclusive || manifest.IsAvailableForTesting; + } + /// /// For a given manifest, determine if the testing version should be used over the normal version. /// The higher of the two versions is calculated after checking other settings. @@ -379,16 +373,7 @@ internal class PluginManager : IInternalDisposableService /// A value indicating whether testing should be used. public bool UseTesting(IPluginManifest manifest) { - if (!this.configuration.DoPluginTest) - return false; - - if (!this.HasTestingOptIn(manifest)) - return false; - - if (manifest.IsTestingExclusive) - return true; - - return HasTestingVersion(manifest); + return this.CanUseTesting(manifest) && this.HasTestingOptIn(manifest); } /// diff --git a/Dalamud/Plugin/Internal/Types/Manifest/IPluginManifest.cs b/Dalamud/Plugin/Internal/Types/Manifest/IPluginManifest.cs index 5ab5abbc1..c770c80be 100644 --- a/Dalamud/Plugin/Internal/Types/Manifest/IPluginManifest.cs +++ b/Dalamud/Plugin/Internal/Types/Manifest/IPluginManifest.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace Dalamud.Plugin.Internal.Types.Manifest; @@ -118,4 +118,9 @@ public interface IPluginManifest /// Gets an URL for the plugin's icon. /// public string? IconUrl { get; } + + /// + /// Gets a value indicating whether this plugin is eligible for testing. + /// + public bool IsAvailableForTesting { get; } } diff --git a/Dalamud/Plugin/Internal/Types/Manifest/RemotePluginManifest.cs b/Dalamud/Plugin/Internal/Types/Manifest/RemotePluginManifest.cs index e3d99a85a..47e92cd84 100644 --- a/Dalamud/Plugin/Internal/Types/Manifest/RemotePluginManifest.cs +++ b/Dalamud/Plugin/Internal/Types/Manifest/RemotePluginManifest.cs @@ -21,9 +21,4 @@ internal record RemotePluginManifest : PluginManifest /// Gets or sets the changelog to be shown when obtaining the testing version of the plugin. /// public string? TestingChangelog { get; set; } - - /// - /// Gets a value indicating whether this plugin is eligible for testing. - /// - public bool IsAvailableForTesting => this.TestingAssemblyVersion != null && this.TestingAssemblyVersion > this.AssemblyVersion; } diff --git a/Dalamud/Plugin/Internal/Types/PluginManifest.cs b/Dalamud/Plugin/Internal/Types/PluginManifest.cs index 57001d63b..f4545d455 100644 --- a/Dalamud/Plugin/Internal/Types/PluginManifest.cs +++ b/Dalamud/Plugin/Internal/Types/PluginManifest.cs @@ -160,4 +160,10 @@ internal record PluginManifest : IPluginManifest /// [JsonProperty("_Dip17Channel")] public string? Dip17Channel { get; init; } + + /// + public bool IsAvailableForTesting + => this.TestingAssemblyVersion != null && + this.TestingAssemblyVersion > this.AssemblyVersion && + this.TestingDalamudApiLevel == PluginManager.DalamudApiLevel; }