diff --git a/Dalamud/Plugin/PluginInstallerWindow.cs b/Dalamud/Plugin/PluginInstallerWindow.cs
index 9fb81cc3c..133d7916c 100644
--- a/Dalamud/Plugin/PluginInstallerWindow.cs
+++ b/Dalamud/Plugin/PluginInstallerWindow.cs
@@ -99,9 +99,16 @@ namespace Dalamud.Plugin
}
didAnyWithSearch = true;
-
- var isInstalled = this.dalamud.PluginManager.Plugins.Where(x => x.Definition != null).Any(
+ var installedPlugin = this.dalamud.PluginManager.Plugins.Where(x => x.Definition != null).FirstOrDefault(
x => x.Definition.InternalName == pluginDefinition.InternalName);
+ var isInstalled = installedPlugin.Definition != null;
+
+ var isRaw = false;
+ if (isInstalled) {
+ if (installedPlugin.PluginInterface.Reason.HasFlag(PluginLoadReason.Dev)) {
+ isRaw = true;
+ }
+ }
var label = isInstalled ? Loc.Localize("InstallerInstalled", " (installed)") : string.Empty;
label = this.updatedPlugins != null &&
@@ -114,6 +121,8 @@ namespace Dalamud.Plugin
? Loc.Localize("InstallerUpdateFailed", " (update failed)")
: label;
+ label = isRaw ? " (dev)" : label;
+
var isTestingAvailable = false;
if (Version.TryParse(pluginDefinition.AssemblyVersion, out var assemblyVersion) && Version.TryParse(pluginDefinition.TestingAssemblyVersion, out var testingAssemblyVersion))
isTestingAvailable = this.dalamud.Configuration.DoPluginTest && testingAssemblyVersion > assemblyVersion;
@@ -124,7 +133,7 @@ namespace Dalamud.Plugin
continue;
}
- label += isTestingAvailable ? " (Testing version)" : string.Empty;
+ label += (isTestingAvailable && !isRaw) ? " (testing version)" : string.Empty;
ImGui.PushID(pluginDefinition.InternalName + pluginDefinition.AssemblyVersion);
@@ -157,8 +166,7 @@ namespace Dalamud.Plugin
});
}
}
- if (!string.IsNullOrEmpty(pluginDefinition.RepoUrl))
- {
+ if (!string.IsNullOrEmpty(pluginDefinition.RepoUrl)) {
ImGui.PushFont(InterfaceManager.IconFont);
ImGui.SameLine();
@@ -169,18 +177,18 @@ namespace Dalamud.Plugin
ImGui.PopFont();
}
} else {
- var installedPlugin = this.dalamud.PluginManager.Plugins.Where(x => x.Definition != null).First(
- x => x.Definition.InternalName ==
- pluginDefinition.InternalName);
-
- if (ImGui.Button(Loc.Localize("InstallerDisable", "Disable")))
- try {
- this.dalamud.PluginManager.DisablePlugin(installedPlugin.Definition);
- } catch (Exception exception) {
- Log.Error(exception, "Could not disable plugin.");
- this.errorModalDrawing = true;
- this.errorModalOnNextFrame = true;
- }
+ if (!isRaw) {
+ if (ImGui.Button(Loc.Localize("InstallerDisable", "Disable")))
+ try {
+ this.dalamud.PluginManager.DisablePlugin(installedPlugin.Definition);
+ } catch (Exception exception) {
+ Log.Error(exception, "Could not disable plugin.");
+ this.errorModalDrawing = true;
+ this.errorModalOnNextFrame = true;
+ }
+ } else {
+ ImGui.NewLine();
+ }
if (installedPlugin.PluginInterface.UiBuilder.OnOpenConfigUi != null) {
ImGui.SameLine();
@@ -201,6 +209,11 @@ namespace Dalamud.Plugin
ImGui.SameLine();
ImGui.TextColored(new Vector4(0.5f, 0.5f, 0.5f, 1.0f), $" v{pluginDefinition.AssemblyVersion}");
+
+ if(isRaw) {
+ ImGui.SameLine();
+ ImGui.TextColored(new Vector4(1.0f, 0.0f, 0.0f, 1.0f), " To update or disable this plugin, please remove it from the devPlugins folder.");
+ }
}
ImGui.Unindent();
diff --git a/Dalamud/Plugin/PluginLoadReason.cs b/Dalamud/Plugin/PluginLoadReason.cs
index e206d82ed..d602cc319 100644
--- a/Dalamud/Plugin/PluginLoadReason.cs
+++ b/Dalamud/Plugin/PluginLoadReason.cs
@@ -9,21 +9,34 @@ namespace Dalamud.Plugin
///
/// This enum reflects reasons for loading a plugin.
///
- public enum PluginLoadReason
+ [Flags]
+ public enum PluginLoadReason
{
+ None = 0,
+
///
/// We don't know why this plugin was loaded.
///
- Unknown,
+ Unknown = 1,
///
/// This plugin was loaded because it was installed with the plugin installer.
///
- Installer,
+ Installer = 2,
///
/// This plugin was loaded because the game was started or Dalamud was reinjected.
///
- Boot
+ Boot = 4,
+
+ ///
+ /// This plugin was loaded from the installedPlugins folder.
+ ///
+ Installed = 8,
+
+ ///
+ /// This plugin was loaded from the devPlugins folder.
+ ///
+ Dev = 16
}
}
diff --git a/Dalamud/Plugin/PluginManager.cs b/Dalamud/Plugin/PluginManager.cs
index 47d45fca4..dd6ea1a17 100644
--- a/Dalamud/Plugin/PluginManager.cs
+++ b/Dalamud/Plugin/PluginManager.cs
@@ -200,7 +200,7 @@ namespace Dalamud.Plugin
foreach (var dllFile in pluginDlls) {
try {
- LoadPluginFromAssembly(dllFile, raw, PluginLoadReason.Boot);
+ LoadPluginFromAssembly(dllFile, raw, PluginLoadReason.Boot | (raw ? PluginLoadReason.Dev : PluginLoadReason.Installed));
} 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 29871cc38..e358f2ff7 100644
--- a/Dalamud/Plugin/PluginRepository.cs
+++ b/Dalamud/Plugin/PluginRepository.cs
@@ -81,7 +81,7 @@ namespace Dalamud.Plugin
if (disabledFile.Exists)
disabledFile.Delete();
- return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer);
+ return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer | PluginLoadReason.Installed);
}
if (dllFile.Exists && !enableAfterInstall) {
@@ -128,7 +128,7 @@ namespace Dalamud.Plugin
testingFile.Delete();
}
- return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer);
+ return this.dalamud.PluginManager.LoadPluginFromAssembly(dllFile, false, PluginLoadReason.Installer | PluginLoadReason.Installed);
}
catch (Exception e)
{