mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
- Add chat notification back to AutoUpdate (#2146)
- ImRaii UI elements in AutoUpdate tab - Fix scoping in IconButton
This commit is contained in:
parent
f7ef68d65e
commit
2e6cb6ef00
5 changed files with 166 additions and 114 deletions
|
|
@ -484,10 +484,15 @@ internal sealed class DalamudConfiguration : IInternalDisposableService
|
|||
public AutoUpdateBehavior? AutoUpdateBehavior { get; set; } = null;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether or not users should be notified regularly about pending updates.
|
||||
/// Gets or sets a value indicating whether users should be notified regularly about pending updates.
|
||||
/// </summary>
|
||||
public bool CheckPeriodicallyForUpdates { get; set; } = true;
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether users should be notified about updates in chat.
|
||||
/// </summary>
|
||||
public bool SendUpdateNotificationToChat { get; set; } = false;
|
||||
|
||||
/// <summary>
|
||||
/// Load a configuration from the provided path.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -272,15 +272,14 @@ public static partial class ImGuiComponents
|
|||
/// <returns>Width.</returns>
|
||||
public static float GetIconButtonWithTextWidth(FontAwesomeIcon icon, string text)
|
||||
{
|
||||
Vector2 iconSize;
|
||||
using (ImRaii.PushFont(UiBuilder.IconFont))
|
||||
{
|
||||
var iconSize = ImGui.CalcTextSize(icon.ToIconString());
|
||||
|
||||
var textSize = ImGui.CalcTextSize(text);
|
||||
|
||||
var iconPadding = 3 * ImGuiHelpers.GlobalScale;
|
||||
|
||||
return iconSize.X + textSize.X + (ImGui.GetStyle().FramePadding.X * 2) + iconPadding;
|
||||
iconSize = ImGui.CalcTextSize(icon.ToIconString());
|
||||
}
|
||||
|
||||
var textSize = ImGui.CalcTextSize(text);
|
||||
var iconPadding = 3 * ImGuiHelpers.GlobalScale;
|
||||
return iconSize.X + textSize.X + (ImGui.GetStyle().FramePadding.X * 2) + iconPadding;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -44,7 +44,9 @@ internal static partial class DalamudComponents
|
|||
ImGui.InputTextWithHint("###pluginPickerSearch", Locs.SearchHint, ref pickerSearch, 255);
|
||||
|
||||
var currentSearchString = pickerSearch;
|
||||
if (ImGui.BeginListBox("###pluginPicker", new Vector2(width, width - 80)))
|
||||
|
||||
using var listBox = ImRaii.ListBox("###pluginPicker", new Vector2(width, width - 80));
|
||||
if (listBox.Success)
|
||||
{
|
||||
// TODO: Plugin searching should be abstracted... installer and this should use the same search
|
||||
var plugins = pm.InstalledPlugins.Where(
|
||||
|
|
@ -56,16 +58,12 @@ internal static partial class DalamudComponents
|
|||
|
||||
foreach (var plugin in plugins)
|
||||
{
|
||||
using var disabled2 =
|
||||
ImRaii.Disabled(pluginDisabled(plugin));
|
||||
|
||||
using var disabled2 = ImRaii.Disabled(pluginDisabled(plugin));
|
||||
if (ImGui.Selectable($"{plugin.Manifest.Name}{(plugin is LocalDevPlugin ? "(dev plugin)" : string.Empty)}###selector{plugin.Manifest.InternalName}"))
|
||||
{
|
||||
onClicked(plugin);
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.EndListBox();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -23,10 +23,11 @@ public class SettingsTabAutoUpdates : SettingsTab
|
|||
{
|
||||
private AutoUpdateBehavior behavior;
|
||||
private bool checkPeriodically;
|
||||
private bool chatNotification;
|
||||
private string pickerSearch = string.Empty;
|
||||
private List<AutoUpdatePreference> autoUpdatePreferences = [];
|
||||
|
||||
public override SettingsEntry[] Entries { get; } = Array.Empty<SettingsEntry>();
|
||||
public override SettingsEntry[] Entries { get; } = [];
|
||||
|
||||
public override string Title => Loc.Localize("DalamudSettingsAutoUpdates", "Auto-Updates");
|
||||
|
||||
|
|
@ -65,6 +66,7 @@ public class SettingsTabAutoUpdates : SettingsTab
|
|||
|
||||
ImGuiHelpers.ScaledDummy(8);
|
||||
|
||||
ImGui.Checkbox(Loc.Localize("DalamudSettingsAutoUpdateChatMessage", "Show notification about updates available in chat"), ref this.chatNotification);
|
||||
ImGui.Checkbox(Loc.Localize("DalamudSettingsAutoUpdatePeriodically", "Periodically check for new updates while playing"), ref this.checkPeriodically);
|
||||
ImGuiHelpers.SafeTextColoredWrapped(ImGuiColors.DalamudGrey, Loc.Localize("DalamudSettingsAutoUpdatePeriodicallyHint",
|
||||
"Plugins won't update automatically after startup, you will only receive a notification while you are not actively playing."));
|
||||
|
|
@ -120,9 +122,10 @@ public class SettingsTabAutoUpdates : SettingsTab
|
|||
if (pmPlugin.IsDev)
|
||||
{
|
||||
ImGui.SetCursorPos(cursorBeforeIcon);
|
||||
ImGui.PushStyleVar(ImGuiStyleVar.Alpha, 0.7f);
|
||||
ImGui.Image(pic.DevPluginIcon.ImGuiHandle, new Vector2(pluginLineHeight));
|
||||
ImGui.PopStyleVar();
|
||||
using (ImRaii.PushStyle(ImGuiStyleVar.Alpha, 0.7f))
|
||||
{
|
||||
ImGui.Image(pic.DevPluginIcon.ImGuiHandle, new Vector2(pluginLineHeight));
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
|
|
@ -166,19 +169,18 @@ public class SettingsTabAutoUpdates : SettingsTab
|
|||
}
|
||||
|
||||
ImGui.SetNextItemWidth(ImGuiHelpers.GlobalScale * 250);
|
||||
if (ImGui.BeginCombo(
|
||||
$"###autoUpdateBehavior{preference.WorkingPluginId}",
|
||||
OptKindToString(preference.Kind)))
|
||||
using (var combo = ImRaii.Combo($"###autoUpdateBehavior{preference.WorkingPluginId}", OptKindToString(preference.Kind)))
|
||||
{
|
||||
foreach (var kind in Enum.GetValues<AutoUpdatePreference.OptKind>())
|
||||
if (combo.Success)
|
||||
{
|
||||
if (ImGui.Selectable(OptKindToString(kind)))
|
||||
foreach (var kind in Enum.GetValues<AutoUpdatePreference.OptKind>())
|
||||
{
|
||||
preference.Kind = kind;
|
||||
if (ImGui.Selectable(OptKindToString(kind)))
|
||||
{
|
||||
preference.Kind = kind;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.EndCombo();
|
||||
}
|
||||
|
||||
ImGui.SameLine();
|
||||
|
|
@ -235,6 +237,7 @@ public class SettingsTabAutoUpdates : SettingsTab
|
|||
var configuration = Service<DalamudConfiguration>.Get();
|
||||
|
||||
this.behavior = configuration.AutoUpdateBehavior ?? AutoUpdateBehavior.None;
|
||||
this.chatNotification = configuration.SendUpdateNotificationToChat;
|
||||
this.checkPeriodically = configuration.CheckPeriodicallyForUpdates;
|
||||
this.autoUpdatePreferences = configuration.PluginAutoUpdatePreferences;
|
||||
|
||||
|
|
@ -246,6 +249,7 @@ public class SettingsTabAutoUpdates : SettingsTab
|
|||
var configuration = Service<DalamudConfiguration>.Get();
|
||||
|
||||
configuration.AutoUpdateBehavior = this.behavior;
|
||||
configuration.SendUpdateNotificationToChat = this.chatNotification;
|
||||
configuration.CheckPeriodicallyForUpdates = this.checkPeriodically;
|
||||
configuration.PluginAutoUpdatePreferences = this.autoUpdatePreferences;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,6 +9,10 @@ using Dalamud.Console;
|
|||
using Dalamud.Game;
|
||||
using Dalamud.Game.ClientState;
|
||||
using Dalamud.Game.ClientState.Conditions;
|
||||
using Dalamud.Game.Gui;
|
||||
using Dalamud.Game.Text;
|
||||
using Dalamud.Game.Text.SeStringHandling;
|
||||
using Dalamud.Game.Text.SeStringHandling.Payloads;
|
||||
using Dalamud.Interface;
|
||||
using Dalamud.Interface.ImGuiNotification;
|
||||
using Dalamud.Interface.ImGuiNotification.EventArgs;
|
||||
|
|
@ -78,6 +82,8 @@ internal class AutoUpdateManager : IServiceType
|
|||
|
||||
private Task? autoUpdateTask;
|
||||
|
||||
private readonly Task<DalamudLinkPayload> openInstallerWindowLink;
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="AutoUpdateManager"/> class.
|
||||
/// </summary>
|
||||
|
|
@ -93,6 +99,17 @@ internal class AutoUpdateManager : IServiceType
|
|||
});
|
||||
Service<Framework>.GetAsync().ContinueWith(t => { t.Result.Update += this.OnUpdate; });
|
||||
|
||||
this.openInstallerWindowLink =
|
||||
Service<ChatGui>.GetAsync().ContinueWith(
|
||||
chatGuiTask => chatGuiTask.Result.AddChatLinkHandler(
|
||||
"Dalamud",
|
||||
1001,
|
||||
(_, _) =>
|
||||
{
|
||||
Service<DalamudInterface>.GetNullable()?.OpenPluginInstallerTo(PluginInstallerOpenKind.InstalledPlugins);
|
||||
}));
|
||||
|
||||
|
||||
this.isDryRun = console.AddVariable("dalamud.autoupdate.dry_run", "Simulate updates instead", false);
|
||||
console.AddCommand("dalamud.autoupdate.trigger_login", "Trigger a login event", () =>
|
||||
{
|
||||
|
|
@ -241,6 +258,7 @@ internal class AutoUpdateManager : IServiceType
|
|||
Log.Error(t.Exception!, "Failed to reload plugin masters for auto-update");
|
||||
}
|
||||
|
||||
Log.Verbose($"Available Updates: {string.Join(", ", this.pluginManager.UpdatablePlugins.Select(s => s.UpdateManifest.InternalName))}");
|
||||
var updatable = this.GetAvailablePluginUpdates(
|
||||
DecideUpdateListingRestriction(behavior));
|
||||
|
||||
|
|
@ -404,6 +422,34 @@ internal class AutoUpdateManager : IServiceType
|
|||
this.nextUpdateCheckTime = DateTime.Now + TimeBetweenUpdateChecksIfDismissed;
|
||||
Log.Verbose("User dismissed update notification, next check at {Time}", this.nextUpdateCheckTime);
|
||||
};
|
||||
|
||||
// Send out a chat message only if the user requested so
|
||||
if (!this.config.SendUpdateNotificationToChat)
|
||||
return;
|
||||
|
||||
var chatGui = Service<ChatGui>.GetNullable();
|
||||
if (chatGui == null)
|
||||
{
|
||||
Log.Verbose("Unable to get chat gui, discard notification for chat.");
|
||||
return;
|
||||
}
|
||||
|
||||
chatGui.Print(new XivChatEntry
|
||||
{
|
||||
Message = new SeString(new List<Payload>
|
||||
{
|
||||
new TextPayload(Locs.NotificationContentUpdatesAvailableMinimized(updatablePlugins.Count)),
|
||||
new TextPayload(" ["),
|
||||
new UIForegroundPayload(500),
|
||||
this.openInstallerWindowLink.Result,
|
||||
new TextPayload(Loc.Localize("DalamudInstallerHelp", "Open the plugin installer")),
|
||||
RawPayload.LinkTerminator,
|
||||
new UIForegroundPayload(0),
|
||||
new TextPayload("]"),
|
||||
}),
|
||||
|
||||
Type = XivChatType.Urgent,
|
||||
});
|
||||
}
|
||||
|
||||
private List<AvailablePluginUpdate> GetAvailablePluginUpdates(UpdateListingRestriction restriction)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue