diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index bfb1b3430..5cd5eadd1 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -1294,6 +1294,25 @@ internal class PluginManager : IInternalDisposableService /// The calling plugin, or null. public LocalPlugin? FindCallingPlugin() => this.FindCallingPlugin(new StackTrace()); + /// + /// Notifies all plugins that the active plugins list changed. + /// + /// The invalidation kind. + /// The affected plugins. + public void NotifyPluginsForStateChange(PluginListInvalidationKind kind, IEnumerable affectedInternalNames) + { + foreach (var installedPlugin in this.installedPluginsList) + { + if (!installedPlugin.IsLoaded || installedPlugin.DalamudInterface == null) + continue; + + installedPlugin.DalamudInterface.NotifyActivePluginsChanged( + kind, + // ReSharper disable once PossibleMultipleEnumeration + affectedInternalNames.Contains(installedPlugin.Manifest.InternalName)); + } + } + /// /// Resolves the services that a plugin may have a dependency on.
/// This is required, as the lifetime of a plugin cannot be longer than PluginManager, @@ -1823,20 +1842,6 @@ internal class PluginManager : IInternalDisposableService this.OnInstalledPluginsChanged?.InvokeSafely(); } - private void NotifyPluginsForStateChange(PluginListInvalidationKind kind, IEnumerable affectedInternalNames) - { - foreach (var installedPlugin in this.installedPluginsList) - { - if (!installedPlugin.IsLoaded || installedPlugin.DalamudInterface == null) - continue; - - installedPlugin.DalamudInterface.NotifyActivePluginsChanged( - kind, - // ReSharper disable once PossibleMultipleEnumeration - affectedInternalNames.Contains(installedPlugin.Manifest.InternalName)); - } - } - private void LoadAndStartLoadSyncPlugins() { try diff --git a/Dalamud/Plugin/Internal/Types/LocalPlugin.cs b/Dalamud/Plugin/Internal/Types/LocalPlugin.cs index 4b2b62669..c426c4cdc 100644 --- a/Dalamud/Plugin/Internal/Types/LocalPlugin.cs +++ b/Dalamud/Plugin/Internal/Types/LocalPlugin.cs @@ -395,6 +395,9 @@ internal class LocalPlugin : IAsyncDisposable this.dalamudInterface); this.State = PluginState.Loaded; Log.Information("Finished loading {PluginName}", this.InternalName); + + var manager = Service.Get(); + manager.NotifyPluginsForStateChange(PluginListInvalidationKind.Load, [this.manifest.InternalName]); } catch (Exception ex) { @@ -470,6 +473,9 @@ internal class LocalPlugin : IAsyncDisposable this.State = PluginState.Unloaded; Log.Information("Finished unloading {PluginName}", this.InternalName); + + var manager = Service.Get(); + manager.NotifyPluginsForStateChange(PluginListInvalidationKind.Unload, [this.manifest.InternalName]); } catch (Exception ex) { diff --git a/Dalamud/Plugin/PluginListInvalidationKind.cs b/Dalamud/Plugin/PluginListInvalidationKind.cs index 4e7782703..7ee121697 100644 --- a/Dalamud/Plugin/PluginListInvalidationKind.cs +++ b/Dalamud/Plugin/PluginListInvalidationKind.cs @@ -1,10 +1,20 @@ -namespace Dalamud.Plugin; +namespace Dalamud.Plugin; /// /// Causes for a change to the plugin list. /// public enum PluginListInvalidationKind { + /// + /// A plugin was loaded. + /// + Load, + + /// + /// A plugin was unloaded. + /// + Unload, + /// /// An installer-initiated update reloaded plugins. ///