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)