Additional installed plugin categories

Introduces new plugin categories for enabled, disabled, and incompatible plugins in PluginCategoryManager and PluginInstallerWindow. Updates filtering logic, UI strings, and groupings to support these new categories, allowing users to view plugins by their enabled/disabled/incompatible status.
This commit is contained in:
Jerric 2025-12-25 01:46:25 -05:00
parent 3be14d4135
commit 0959a9ea48
2 changed files with 58 additions and 1 deletions

View file

@ -30,6 +30,9 @@ internal class PluginCategoryManager
new(CategoryKind.PluginChangelogs, "special.plugins", () => Locs.Category_Plugins), new(CategoryKind.PluginChangelogs, "special.plugins", () => Locs.Category_Plugins),
new(CategoryKind.PluginProfiles, "special.profiles", () => Locs.Category_PluginProfiles), new(CategoryKind.PluginProfiles, "special.profiles", () => Locs.Category_PluginProfiles),
new(CategoryKind.UpdateablePlugins, "special.updateable", () => Locs.Category_UpdateablePlugins), new(CategoryKind.UpdateablePlugins, "special.updateable", () => Locs.Category_UpdateablePlugins),
new(CategoryKind.EnabledPlugins, "special.enabled", () => Locs.Category_EnabledPlugins),
new(CategoryKind.DisabledPlugins, "special.disabled", () => Locs.Category_DisabledPlugins),
new(CategoryKind.IncompatiblePlugins, "special.incompatible", () => Locs.Category_IncompatiblePlugins),
// Tag-driven categories // Tag-driven categories
new(CategoryKind.Other, "other", () => Locs.Category_Other), new(CategoryKind.Other, "other", () => Locs.Category_Other),
@ -47,7 +50,7 @@ internal class PluginCategoryManager
private GroupInfo[] groupList = private GroupInfo[] groupList =
[ [
new(GroupKind.DevTools, () => Locs.Group_DevTools, CategoryKind.DevInstalled, CategoryKind.IconTester), new(GroupKind.DevTools, () => Locs.Group_DevTools, CategoryKind.DevInstalled, CategoryKind.IconTester),
new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles), new(GroupKind.Installed, () => Locs.Group_Installed, CategoryKind.All, CategoryKind.IsTesting, CategoryKind.UpdateablePlugins, CategoryKind.PluginProfiles, CategoryKind.EnabledPlugins, CategoryKind.DisabledPlugins, CategoryKind.IncompatiblePlugins),
new(GroupKind.Available, () => Locs.Group_Available, CategoryKind.All), new(GroupKind.Available, () => Locs.Group_Available, CategoryKind.All),
new(GroupKind.Changelog, () => Locs.Group_Changelog, CategoryKind.All, CategoryKind.DalamudChangelogs, CategoryKind.PluginChangelogs) new(GroupKind.Changelog, () => Locs.Group_Changelog, CategoryKind.All, CategoryKind.DalamudChangelogs, CategoryKind.PluginChangelogs)
@ -142,6 +145,21 @@ internal class PluginCategoryManager
/// </summary> /// </summary>
UpdateablePlugins = 15, UpdateablePlugins = 15,
/// <summary>
/// Enabled plugins.
/// </summary>
EnabledPlugins = 16,
/// <summary>
/// Disabled plugins.
/// </summary>
DisabledPlugins = 17,
/// <summary>
/// Incompatible plugins.
/// </summary>
IncompatiblePlugins = 18,
/// <summary> /// <summary>
/// Plugins tagged as "other". /// Plugins tagged as "other".
/// </summary> /// </summary>
@ -555,6 +573,12 @@ internal class PluginCategoryManager
public static string Category_PluginProfiles => Loc.Localize("InstallerCategoryPluginProfiles", "Plugin Collections"); public static string Category_PluginProfiles => Loc.Localize("InstallerCategoryPluginProfiles", "Plugin Collections");
public static string Category_UpdateablePlugins => Loc.Localize("InstallerCategoryCanBeUpdated", "Can be updated"); public static string Category_UpdateablePlugins => Loc.Localize("InstallerCategoryCanBeUpdated", "Can be updated");
public static string Category_EnabledPlugins => Loc.Localize("InstallerCategoryEnabledPlugins", "Enabled");
public static string Category_DisabledPlugins => Loc.Localize("InstallerCategoryDisabledPlugins", "Disabled");
public static string Category_IncompatiblePlugins => Loc.Localize("InstallerCategoryIncompatiblePlugins", "Incompatible");
public static string Category_Other => Loc.Localize("InstallerCategoryOther", "Other"); public static string Category_Other => Loc.Localize("InstallerCategoryOther", "Other");

View file

@ -235,6 +235,9 @@ internal class PluginInstallerWindow : Window, IDisposable
Testing, Testing,
Updateable, Updateable,
Dev, Dev,
Enabled,
Disabled,
Incompatible,
} }
private bool AnyOperationInProgress => this.installStatus == OperationStatus.InProgress || private bool AnyOperationInProgress => this.installStatus == OperationStatus.InProgress ||
@ -1453,6 +1456,15 @@ internal class PluginInstallerWindow : Window, IDisposable
if (filter == InstalledPluginListFilter.Testing && !manager.HasTestingOptIn(plugin.Manifest)) if (filter == InstalledPluginListFilter.Testing && !manager.HasTestingOptIn(plugin.Manifest))
continue; continue;
if (filter == InstalledPluginListFilter.Enabled && (!plugin.IsWantedByAnyProfile || plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned))
continue;
if (filter == InstalledPluginListFilter.Disabled && (plugin.IsWantedByAnyProfile || plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned))
continue;
if (filter == InstalledPluginListFilter.Incompatible && !(plugin.IsOutdated || plugin.IsBanned || plugin.IsOrphaned || plugin.IsDecommissioned))
continue;
// Find applicable update and manifest, if we have them // Find applicable update and manifest, if we have them
AvailablePluginUpdate? update = null; AvailablePluginUpdate? update = null;
RemotePluginManifest? remoteManifest = null; RemotePluginManifest? remoteManifest = null;
@ -1485,6 +1497,9 @@ internal class PluginInstallerWindow : Window, IDisposable
InstalledPluginListFilter.Testing => Locs.TabBody_NoPluginsTesting, InstalledPluginListFilter.Testing => Locs.TabBody_NoPluginsTesting,
InstalledPluginListFilter.Updateable => Locs.TabBody_NoPluginsUpdateable, InstalledPluginListFilter.Updateable => Locs.TabBody_NoPluginsUpdateable,
InstalledPluginListFilter.Dev => Locs.TabBody_NoPluginsDev, InstalledPluginListFilter.Dev => Locs.TabBody_NoPluginsDev,
InstalledPluginListFilter.Enabled => Locs.TabBody_NoPluginsEnabled,
InstalledPluginListFilter.Disabled => Locs.TabBody_NoPluginsDisabled,
InstalledPluginListFilter.Incompatible => Locs.TabBody_NoPluginsIncompatible,
_ => throw new ArgumentException(null, nameof(filter)), _ => throw new ArgumentException(null, nameof(filter)),
}; };
@ -1725,6 +1740,18 @@ internal class PluginInstallerWindow : Window, IDisposable
this.DrawInstalledPluginList(InstalledPluginListFilter.Updateable); this.DrawInstalledPluginList(InstalledPluginListFilter.Updateable);
break; break;
case PluginCategoryManager.CategoryKind.EnabledPlugins:
this.DrawInstalledPluginList(InstalledPluginListFilter.Enabled);
break;
case PluginCategoryManager.CategoryKind.DisabledPlugins:
this.DrawInstalledPluginList(InstalledPluginListFilter.Disabled);
break;
case PluginCategoryManager.CategoryKind.IncompatiblePlugins:
this.DrawInstalledPluginList(InstalledPluginListFilter.Incompatible);
break;
case PluginCategoryManager.CategoryKind.PluginProfiles: case PluginCategoryManager.CategoryKind.PluginProfiles:
this.profileManagerWidget.Draw(); this.profileManagerWidget.Draw();
break; break;
@ -4097,6 +4124,12 @@ internal class PluginInstallerWindow : Window, IDisposable
public static string TabBody_NoPluginsDev => Loc.Localize("InstallerNoPluginsDev", "You don't have any dev plugins. Add them from the settings."); public static string TabBody_NoPluginsDev => Loc.Localize("InstallerNoPluginsDev", "You don't have any dev plugins. Add them from the settings.");
public static string TabBody_NoPluginsEnabled => Loc.Localize("InstallerNoPluginsEnabled", "You don't have any enabled plugins.");
public static string TabBody_NoPluginsDisabled => Loc.Localize("InstallerNoPluginsDisabled", "You don't have any disabled plugins.");
public static string TabBody_NoPluginsIncompatible => Loc.Localize("InstallerNoPluginsIncompatible", "You don't have any incompatible plugins.");
#endregion #endregion
#region Search text #region Search text