diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index 821a01ee7..f99bfeae4 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -41,10 +41,6 @@ namespace Dalamud.Plugin.Internal private readonly DirectoryInfo devPluginDirectory; private readonly BannedPlugin[] bannedPlugins; - private readonly List installedPlugins = new(); - private List availablePlugins = new(); - private List updatablePlugins = new(); - /// /// Initializes a new instance of the class. /// @@ -130,7 +126,7 @@ namespace Dalamud.Plugin.Internal /// public void Dispose() { - foreach (var plugin in this.installedPlugins.ToArray()) + foreach (var plugin in this.InstalledPlugins) { try { @@ -271,10 +267,8 @@ namespace Dalamud.Plugin.Internal { var aggregate = new List(); - for (var i = 0; i < this.installedPlugins.Count; i++) + foreach (var plugin in this.InstalledPlugins) { - var plugin = this.installedPlugins[i]; - if (plugin.IsLoaded) { try @@ -314,11 +308,11 @@ namespace Dalamud.Plugin.Internal /// Whether to notify that available plugins have changed afterwards. public void RefilterPluginMasters(bool notify = true) { - this.availablePlugins = this.Repos + this.AvailablePlugins = this.Repos .SelectMany(repo => repo.PluginMaster) .Where(this.IsManifestEligible) .Where(this.IsManifestVisible) - .ToList(); + .ToImmutableList(); if (notify) { @@ -570,7 +564,7 @@ namespace Dalamud.Plugin.Internal } } - this.installedPlugins.Add(plugin); + this.InstalledPlugins = this.InstalledPlugins.Add(plugin); return plugin; } @@ -583,7 +577,7 @@ namespace Dalamud.Plugin.Internal if (plugin.State != PluginState.Unloaded) throw new InvalidPluginOperationException($"Unable to remove {plugin.Name}, not unloaded"); - this.installedPlugins.Remove(plugin); + this.InstalledPlugins = this.InstalledPlugins.Remove(plugin); PluginLocations.Remove(plugin.AssemblyName.FullName); this.NotifyInstalledPluginsChanged(); @@ -696,9 +690,9 @@ namespace Dalamud.Plugin.Internal var updatedList = new List(); // Prevent collection was modified errors - for (var i = 0; i < this.updatablePlugins.Count; i++) + foreach (var plugin in this.UpdatablePlugins) { - var result = await this.UpdateSinglePluginAsync(this.updatablePlugins[i], false, dryRun); + var result = await this.UpdateSinglePluginAsync(plugin, false, dryRun); if (result != null) updatedList.Add(result); } @@ -758,7 +752,7 @@ namespace Dalamud.Plugin.Internal try { plugin.Disable(); - this.installedPlugins.Remove(plugin); + this.InstalledPlugins = this.InstalledPlugins.Remove(plugin); } catch (Exception ex) { @@ -930,15 +924,13 @@ namespace Dalamud.Plugin.Internal { var updatablePlugins = new List(); - for (var i = 0; i < this.installedPlugins.Count; i++) + foreach (var plugin in this.InstalledPlugins) { - var plugin = this.installedPlugins[i]; - var installedVersion = plugin.IsTesting ? plugin.Manifest.TestingAssemblyVersion : plugin.Manifest.AssemblyVersion; - var updates = this.availablePlugins + var updates = this.AvailablePlugins .Where(remoteManifest => plugin.Manifest.InternalName == remoteManifest.InternalName) .Select(remoteManifest => { @@ -960,7 +952,7 @@ namespace Dalamud.Plugin.Internal } } - this.updatablePlugins = updatablePlugins; + this.UpdatablePlugins = updatablePlugins.ToImmutableList(); } private void NotifyAvailablePluginsChanged() @@ -969,8 +961,6 @@ namespace Dalamud.Plugin.Internal try { - this.AvailablePlugins = ImmutableList.CreateRange(this.availablePlugins); - this.UpdatablePlugins = ImmutableList.CreateRange(this.updatablePlugins); this.OnAvailablePluginsChanged?.Invoke(); } catch (Exception ex) @@ -985,8 +975,6 @@ namespace Dalamud.Plugin.Internal try { - this.InstalledPlugins = ImmutableList.CreateRange(this.installedPlugins); - this.UpdatablePlugins = ImmutableList.CreateRange(this.updatablePlugins); this.OnInstalledPluginsChanged?.Invoke(); } catch (Exception ex)