diff --git a/Dalamud/Interface/DalamudDataWindow.cs b/Dalamud/Interface/DalamudDataWindow.cs index 90cb4a3ba..c0cded6e1 100644 --- a/Dalamud/Interface/DalamudDataWindow.cs +++ b/Dalamud/Interface/DalamudDataWindow.cs @@ -182,8 +182,8 @@ namespace Dalamud.Interface // Subscriptions case 5: - var i1 = new DalamudPluginInterface(this.dalamud, "DalamudTestSub", null); - var i2 = new DalamudPluginInterface(this.dalamud, "DalamudTestPub", null); + var i1 = new DalamudPluginInterface(this.dalamud, "DalamudTestSub", null, PluginLoadReason.Boot); + var i2 = new DalamudPluginInterface(this.dalamud, "DalamudTestPub", null, PluginLoadReason.Boot); if (ImGui.Button("Add test sub")) i1.Subscribe("DalamudTestPub", o => { dynamic msg = o; diff --git a/Dalamud/Plugin/DalamudPluginInterface.cs b/Dalamud/Plugin/DalamudPluginInterface.cs index 5835de8bf..bda21c643 100644 --- a/Dalamud/Plugin/DalamudPluginInterface.cs +++ b/Dalamud/Plugin/DalamudPluginInterface.cs @@ -22,6 +22,11 @@ namespace Dalamud.Plugin /// This class acts as an interface to various objects needed to interact with Dalamud and the game. /// public class DalamudPluginInterface : IDisposable { + /// + /// The reason this plugin was loaded. + /// + public PluginLoadReason Reason { get; } + /// /// The CommandManager object that allows you to add and remove custom chat commands. /// @@ -65,7 +70,8 @@ namespace Dalamud.Plugin /// Set up the interface and populate all fields needed. /// /// - public DalamudPluginInterface(Dalamud dalamud, string pluginName, PluginConfigurations configs) { + internal DalamudPluginInterface(Dalamud dalamud, string pluginName, PluginConfigurations configs, PluginLoadReason reason) { + Reason = reason; this.CommandManager = dalamud.CommandManager; this.Framework = dalamud.Framework; this.ClientState = dalamud.ClientState; diff --git a/Dalamud/Plugin/PluginLoadReason.cs b/Dalamud/Plugin/PluginLoadReason.cs new file mode 100644 index 000000000..e206d82ed --- /dev/null +++ b/Dalamud/Plugin/PluginLoadReason.cs @@ -0,0 +1,29 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Dalamud.Plugin +{ + /// + /// This enum reflects reasons for loading a plugin. + /// + public enum PluginLoadReason + { + /// + /// We don't know why this plugin was loaded. + /// + Unknown, + + /// + /// This plugin was loaded because it was installed with the plugin installer. + /// + Installer, + + /// + /// This plugin was loaded because the game was started or Dalamud was reinjected. + /// + Boot + } +} diff --git a/Dalamud/Plugin/PluginManager.cs b/Dalamud/Plugin/PluginManager.cs index 918da6583..402ea79dd 100644 --- a/Dalamud/Plugin/PluginManager.cs +++ b/Dalamud/Plugin/PluginManager.cs @@ -88,7 +88,7 @@ namespace Dalamud.Plugin this.Plugins.Remove(thisPlugin); } - public bool LoadPluginFromAssembly(FileInfo dllFile, bool raw) { + public bool LoadPluginFromAssembly(FileInfo dllFile, bool raw, PluginLoadReason reason) { Log.Information("Loading plugin at {0}", dllFile.Directory.FullName); // If this entire folder has been marked as a disabled plugin, don't even try to load anything @@ -170,7 +170,7 @@ namespace Dalamud.Plugin return false; } - var dalamudInterface = new DalamudPluginInterface(this.dalamud, type.Assembly.GetName().Name, this.pluginConfigs); + var dalamudInterface = new DalamudPluginInterface(this.dalamud, type.Assembly.GetName().Name, this.pluginConfigs, reason); plugin.Initialize(dalamudInterface); Log.Information("Loaded plugin: {0}", plugin.Name); @@ -194,7 +194,7 @@ namespace Dalamud.Plugin foreach (var dllFile in pluginDlls) { try { - LoadPluginFromAssembly(dllFile, raw); + LoadPluginFromAssembly(dllFile, raw, PluginLoadReason.Boot); } catch (Exception ex) { Log.Error(ex, $"Plugin load for {dllFile.FullName} failed."); } diff --git a/Dalamud/Plugin/PluginRepository.cs b/Dalamud/Plugin/PluginRepository.cs index 282df3c63..d7903c811 100644 --- a/Dalamud/Plugin/PluginRepository.cs +++ b/Dalamud/Plugin/PluginRepository.cs @@ -76,7 +76,7 @@ namespace Dalamud.Plugin if (disabledFile.Exists) disabledFile.Delete(); - return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false); + return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer); } if (dllFile.Exists && !enableAfterInstall) { @@ -105,7 +105,7 @@ namespace Dalamud.Plugin return true; } - return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false); + return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer); } catch (Exception e) {