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