mirror of
https://github.com/goatcorp/Dalamud.git
synced 2026-02-25 14:11:48 +01:00
Merge remote-tracking branch 'origin/master' into apiX-rollup
This commit is contained in:
commit
263610c9e7
28 changed files with 1526 additions and 311 deletions
|
|
@ -29,40 +29,6 @@ namespace Dalamud.Game;
|
|||
[ServiceManager.EarlyLoadedService]
|
||||
internal class ChatHandlers : IServiceType
|
||||
{
|
||||
// private static readonly Dictionary<string, string> UnicodeToDiscordEmojiDict = new()
|
||||
// {
|
||||
// { "", "<:ffxive071:585847382210642069>" },
|
||||
// { "", "<:ffxive083:585848592699490329>" },
|
||||
// };
|
||||
|
||||
// private readonly Dictionary<XivChatType, Color> handledChatTypeColors = new()
|
||||
// {
|
||||
// { XivChatType.CrossParty, Color.DodgerBlue },
|
||||
// { XivChatType.Party, Color.DodgerBlue },
|
||||
// { XivChatType.FreeCompany, Color.DeepSkyBlue },
|
||||
// { XivChatType.CrossLinkShell1, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell2, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell3, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell4, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell5, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell6, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell7, Color.ForestGreen },
|
||||
// { XivChatType.CrossLinkShell8, Color.ForestGreen },
|
||||
// { XivChatType.Ls1, Color.ForestGreen },
|
||||
// { XivChatType.Ls2, Color.ForestGreen },
|
||||
// { XivChatType.Ls3, Color.ForestGreen },
|
||||
// { XivChatType.Ls4, Color.ForestGreen },
|
||||
// { XivChatType.Ls5, Color.ForestGreen },
|
||||
// { XivChatType.Ls6, Color.ForestGreen },
|
||||
// { XivChatType.Ls7, Color.ForestGreen },
|
||||
// { XivChatType.Ls8, Color.ForestGreen },
|
||||
// { XivChatType.TellIncoming, Color.HotPink },
|
||||
// { XivChatType.PvPTeam, Color.SandyBrown },
|
||||
// { XivChatType.Urgent, Color.DarkViolet },
|
||||
// { XivChatType.NoviceNetwork, Color.SaddleBrown },
|
||||
// { XivChatType.Echo, Color.Gray },
|
||||
// };
|
||||
|
||||
private static readonly ModuleLog Log = new("CHATHANDLER");
|
||||
|
||||
private readonly Regex rmtRegex = new(
|
||||
|
|
@ -105,8 +71,6 @@ internal class ChatHandlers : IServiceType
|
|||
|
||||
private readonly Regex urlRegex = new(@"(http|ftp|https)://([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?", RegexOptions.Compiled);
|
||||
|
||||
private readonly DalamudLinkPayload openInstallerWindowLink;
|
||||
|
||||
[ServiceManager.ServiceDependency]
|
||||
private readonly Dalamud dalamud = Service<Dalamud>.Get();
|
||||
|
||||
|
|
@ -114,19 +78,12 @@ internal class ChatHandlers : IServiceType
|
|||
private readonly DalamudConfiguration configuration = Service<DalamudConfiguration>.Get();
|
||||
|
||||
private bool hasSeenLoadingMsg;
|
||||
private bool startedAutoUpdatingPlugins;
|
||||
private CancellationTokenSource deferredAutoUpdateCts = new();
|
||||
|
||||
[ServiceManager.ServiceConstructor]
|
||||
private ChatHandlers(ChatGui chatGui)
|
||||
{
|
||||
chatGui.CheckMessageHandled += this.OnCheckMessageHandled;
|
||||
chatGui.ChatMessage += this.OnChatMessage;
|
||||
|
||||
this.openInstallerWindowLink = chatGui.AddChatLinkHandler("Dalamud", 1001, (i, m) =>
|
||||
{
|
||||
Service<DalamudInterface>.GetNullable()?.OpenPluginInstallerTo(PluginInstallerOpenKind.InstalledPlugins);
|
||||
});
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
@ -175,9 +132,6 @@ internal class ChatHandlers : IServiceType
|
|||
{
|
||||
if (!this.hasSeenLoadingMsg)
|
||||
this.PrintWelcomeMessage();
|
||||
|
||||
if (!this.startedAutoUpdatingPlugins)
|
||||
this.AutoUpdatePluginsWithRetry();
|
||||
}
|
||||
|
||||
// For injections while logged in
|
||||
|
|
@ -272,89 +226,4 @@ internal class ChatHandlers : IServiceType
|
|||
|
||||
this.hasSeenLoadingMsg = true;
|
||||
}
|
||||
|
||||
private void AutoUpdatePluginsWithRetry()
|
||||
{
|
||||
var firstAttempt = this.AutoUpdatePlugins();
|
||||
if (!firstAttempt)
|
||||
{
|
||||
Task.Run(() =>
|
||||
{
|
||||
Task.Delay(30_000, this.deferredAutoUpdateCts.Token);
|
||||
this.AutoUpdatePlugins();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private bool AutoUpdatePlugins()
|
||||
{
|
||||
var chatGui = Service<ChatGui>.GetNullable();
|
||||
var pluginManager = Service<PluginManager>.GetNullable();
|
||||
var notifications = Service<NotificationManager>.GetNullable();
|
||||
var condition = Service<Condition>.GetNullable();
|
||||
|
||||
if (chatGui == null || pluginManager == null || notifications == null || condition == null)
|
||||
{
|
||||
Log.Warning("Aborting auto-update because a required service was not loaded.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (condition.Any(ConditionFlag.BoundByDuty, ConditionFlag.BoundByDuty56, ConditionFlag.BoundByDuty95))
|
||||
{
|
||||
Log.Warning("Aborting auto-update because the player is in a duty.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!pluginManager.ReposReady || !pluginManager.InstalledPlugins.Any() || !pluginManager.AvailablePlugins.Any())
|
||||
{
|
||||
// Plugins aren't ready yet.
|
||||
// TODO: We should retry. This sucks, because it means we won't ever get here again until another notice.
|
||||
Log.Warning("Aborting auto-update because plugins weren't loaded or ready.");
|
||||
return false;
|
||||
}
|
||||
|
||||
this.startedAutoUpdatingPlugins = true;
|
||||
|
||||
Log.Debug("Beginning plugin auto-update process...");
|
||||
Task.Run(() => pluginManager.UpdatePluginsAsync(true, !this.configuration.AutoUpdatePlugins, true)).ContinueWith(task =>
|
||||
{
|
||||
this.IsAutoUpdateComplete = true;
|
||||
|
||||
if (task.IsFaulted)
|
||||
{
|
||||
Log.Error(task.Exception, Loc.Localize("DalamudPluginUpdateCheckFail", "Could not check for plugin updates."));
|
||||
return;
|
||||
}
|
||||
|
||||
var updatedPlugins = task.Result.ToList();
|
||||
if (updatedPlugins.Any())
|
||||
{
|
||||
if (this.configuration.AutoUpdatePlugins)
|
||||
{
|
||||
Service<PluginManager>.Get().PrintUpdatedPlugins(updatedPlugins, Loc.Localize("DalamudPluginAutoUpdate", "Auto-update:"));
|
||||
notifications.AddNotification(Loc.Localize("NotificationUpdatedPlugins", "{0} of your plugins were updated.").Format(updatedPlugins.Count), Loc.Localize("NotificationAutoUpdate", "Auto-Update"), NotificationType.Info);
|
||||
}
|
||||
else
|
||||
{
|
||||
chatGui.Print(new XivChatEntry
|
||||
{
|
||||
Message = new SeString(new List<Payload>()
|
||||
{
|
||||
new TextPayload(Loc.Localize("DalamudPluginUpdateRequired", "One or more of your plugins needs to be updated. Please use the /xlplugins command in-game to update them!")),
|
||||
new TextPayload(" ["),
|
||||
new UIForegroundPayload(500),
|
||||
this.openInstallerWindowLink,
|
||||
new TextPayload(Loc.Localize("DalamudInstallerHelp", "Open the plugin installer")),
|
||||
RawPayload.LinkTerminator,
|
||||
new UIForegroundPayload(0),
|
||||
new TextPayload("]"),
|
||||
}),
|
||||
Type = XivChatType.Urgent,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue