From 2bb7f93b6515463ce3403fe4e0be6a9703d87314 Mon Sep 17 00:00:00 2001 From: Raymond Date: Thu, 15 Jul 2021 10:21:49 -0400 Subject: [PATCH] Notify on repo list changed --- .../Internal/Windows/SettingsWindow.cs | 18 ++++++++++++++- Dalamud/Plugin/Internal/PluginManager.cs | 22 +++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/Dalamud/Interface/Internal/Windows/SettingsWindow.cs b/Dalamud/Interface/Internal/Windows/SettingsWindow.cs index 4e6812328..f5c13dd0a 100644 --- a/Dalamud/Interface/Internal/Windows/SettingsWindow.cs +++ b/Dalamud/Interface/Internal/Windows/SettingsWindow.cs @@ -45,6 +45,7 @@ namespace Dalamud.Interface.Internal.Windows private bool doViewport; private bool doGamepad; private List thirdRepoList; + private bool thirdRepoListChanged; private bool printPluginsWelcomeMsg; private bool autoUpdatePlugins; @@ -142,6 +143,7 @@ namespace Dalamud.Interface.Internal.Windows /// public override void OnOpen() { + this.thirdRepoListChanged = false; } /// @@ -337,6 +339,7 @@ namespace Dalamud.Interface.Internal.Windows if (toRemove != null) { this.thirdRepoList.Remove(toRemove); + this.thirdRepoListChanged = true; } ImGui.SetCursorPosX(ImGui.GetCursorPosX() + (ImGui.GetColumnWidth() / 2) - 8 - (ImGui.CalcTextSize(repoNumber.ToString()).X / 2)); @@ -361,7 +364,7 @@ namespace Dalamud.Interface.Internal.Windows Url = this.thirdRepoTempUrl, IsEnabled = true, }); - + this.thirdRepoListChanged = true; this.thirdRepoTempUrl = string.Empty; } } @@ -384,6 +387,12 @@ namespace Dalamud.Interface.Internal.Windows if (ImGui.Button(Loc.Localize("Save", "Save"))) { this.Save(); + + if (this.thirdRepoListChanged) + { + this.dalamud.PluginManager.SetPluginReposFromConfig(true); + this.thirdRepoListChanged = false; + } } ImGui.SameLine(); @@ -391,6 +400,13 @@ namespace Dalamud.Interface.Internal.Windows if (ImGui.Button(Loc.Localize("SaveAndClose", "Save and Close"))) { this.Save(); + + if (this.thirdRepoListChanged) + { + this.dalamud.PluginManager.SetPluginReposFromConfig(true); + this.thirdRepoListChanged = false; + } + this.IsOpen = false; } } diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index fb155df08..6cda9827a 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -64,9 +64,7 @@ namespace Dalamud.Plugin.Internal var bannedPluginsJson = File.ReadAllText(Path.Combine(this.dalamud.StartInfo.AssetDirectory, "UIRes", "bannedplugin.json")); this.bannedPlugins = JsonConvert.DeserializeObject(bannedPluginsJson); - this.Repos.Add(PluginRepository.MainRepo); - this.Repos.AddRange(this.dalamud.Configuration.ThirdRepoList - .Select(repo => new PluginRepository(repo.Url, repo.IsEnabled))); + this.SetPluginReposFromConfig(false); this.ApplyPatches(); } @@ -99,7 +97,7 @@ namespace Dalamud.Plugin.Internal /// /// Gets a list of all plugin repositories. The main repo should always be first. /// - public List Repos { get; } = new(); + public List Repos { get; private set; } = new(); /// /// Gets a value indicating whether plugins are not still loading from boot. @@ -137,6 +135,22 @@ namespace Dalamud.Plugin.Internal } } + /// + /// Set the list of repositories to use. Should be called when the Settings window has been updated or at instantiation. + /// + /// Whether the available plugins changed should be evented after. + public void SetPluginReposFromConfig(bool notify) + { + var repos = new List() { PluginRepository.MainRepo }; + repos.AddRange(this.dalamud.Configuration.ThirdRepoList + .Select(repo => new PluginRepository(repo.Url, repo.IsEnabled))); + + this.Repos = repos; + + if (notify) + this.NotifyAvailablePluginsChanged(); + } + /// /// Load all plugins, sorted by priority. Any plugins with no explicit definition file or a negative priority /// are loaded asynchronously. Should only be called during Dalamud startup.