diff --git a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs index 5d6f59a08..237fd61ca 100644 --- a/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs +++ b/Dalamud/Interface/Internal/Windows/PluginInstaller/PluginInstallerWindow.cs @@ -265,7 +265,45 @@ namespace Dalamud.Interface.Internal.Windows.PluginInstaller ImGuiHelpers.CenteredText("Installing plugin..."); break; case LoadingIndicatorKind.Manager: - ImGuiHelpers.CenteredText("Loading repositories and plugins..."); + { + if (pluginManager.PluginsReady && !pluginManager.ReposReady) + { + ImGuiHelpers.CenteredText("Loading repositories..."); + } + else if (!pluginManager.PluginsReady && pluginManager.ReposReady) + { + ImGuiHelpers.CenteredText("Loading installed plugins..."); + } + else + { + ImGuiHelpers.CenteredText("Loading repositories and plugins..."); + } + + var currentProgress = 0; + var total = 0; + + var pendingRepos = pluginManager.Repos.ToArray() + .Where(x => (x.State != PluginRepositoryState.Success && + x.State != PluginRepositoryState.Fail) && + x.IsEnabled) + .ToArray(); + var allRepoCount = + pluginManager.Repos.Count(x => x.State != PluginRepositoryState.Fail && x.IsEnabled); + + foreach (var repo in pendingRepos) + { + ImGuiHelpers.CenteredText($"{repo.PluginMasterUrl}: {repo.State}"); + } + + currentProgress += allRepoCount - pendingRepos.Length; + total += allRepoCount; + + if (currentProgress != total) + { + ImGui.ProgressBar(currentProgress / (float)total, new Vector2(windowSize.X / 3, 50)); + } + } + break; default: throw new ArgumentOutOfRangeException(); diff --git a/Dalamud/Plugin/Internal/PluginManager.cs b/Dalamud/Plugin/Internal/PluginManager.cs index e8232d386..92307cff1 100644 --- a/Dalamud/Plugin/Internal/PluginManager.cs +++ b/Dalamud/Plugin/Internal/PluginManager.cs @@ -125,7 +125,7 @@ internal partial class PluginManager : IDisposable, IServiceType /// /// Gets a value indicating whether all added repos are not in progress. /// - public bool ReposReady => this.Repos.All(repo => repo.State != PluginRepositoryState.InProgress); + public bool ReposReady => this.Repos.All(repo => repo.State != PluginRepositoryState.InProgress || repo.State != PluginRepositoryState.Fail); /// /// Gets a value indicating whether the plugin manager started in safe mode. @@ -492,7 +492,9 @@ internal partial class PluginManager : IDisposable, IServiceType /// A representing the asynchronous operation. public async Task ReloadPluginMastersAsync(bool notify = true) { + Log.Information("Now reloading all PluginMasters..."); await Task.WhenAll(this.Repos.Select(repo => repo.ReloadPluginMasterAsync())); + Log.Information("PluginMasters reloaded, now refiltering..."); this.RefilterPluginMasters(notify); } diff --git a/Dalamud/Plugin/Internal/Types/PluginRepository.cs b/Dalamud/Plugin/Internal/Types/PluginRepository.cs index 82e4fb13d..5c7659d90 100644 --- a/Dalamud/Plugin/Internal/Types/PluginRepository.cs +++ b/Dalamud/Plugin/Internal/Types/PluginRepository.cs @@ -24,6 +24,7 @@ internal class PluginRepository private static readonly HttpClient HttpClient = new() { + Timeout = TimeSpan.FromSeconds(20), DefaultRequestHeaders = { CacheControl = new CacheControlHeaderValue @@ -109,7 +110,7 @@ internal class PluginRepository this.PluginMaster = pluginMaster.AsReadOnly(); - Log.Debug($"Successfully fetched repo: {this.PluginMasterUrl}"); + Log.Information($"Successfully fetched repo: {this.PluginMasterUrl}"); this.State = PluginRepositoryState.Success; } catch (Exception ex)