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)
{