diff --git a/Command.cs b/Command.cs index 6aa413b..2f2d804 100644 --- a/Command.cs +++ b/Command.cs @@ -2,6 +2,8 @@ using System.Drawing; using System.Drawing.Imaging; using Blake3; using Dalamud.Game.Command; +using Dalamud.Game.Text.SeStringHandling; +using Dalamud.Game.Text.SeStringHandling.Payloads; using Newtonsoft.Json; using WebP.Net; @@ -75,7 +77,16 @@ internal class Command : IDisposable { // TODO: save this info to database Plugin.Log.Info(json); - this.Plugin.ChatGui.Print("Screenshot saved."); + var message = new SeStringBuilder() + .AddText("Screenshot saved. [") + .AddUiForeground(12) + .Add(this.Plugin.LinkHandlers.OpenFolder) + .AddText("Open folder") + .Add(RawPayload.LinkTerminator) + .AddUiForegroundOff() + .AddText("]") + .Build(); + this.Plugin.ChatGui.Print(message); }); } diff --git a/LinkHandlers.cs b/LinkHandlers.cs new file mode 100644 index 0000000..4633933 --- /dev/null +++ b/LinkHandlers.cs @@ -0,0 +1,25 @@ +using System.Diagnostics; +using Dalamud.Game.Text.SeStringHandling.Payloads; + +namespace Screenie; + +internal class LinkHandlers : IDisposable { + private Plugin Plugin { get; } + + internal DalamudLinkPayload OpenFolder { get; } + + internal LinkHandlers(Plugin plugin) { + this.Plugin = plugin; + + this.OpenFolder = this.Plugin.Interface.AddChatLinkHandler(0x00, (_, _) => { + Process.Start(new ProcessStartInfo(this.Plugin.Config.SaveDirectory) { + UseShellExecute = true, + }); + }); + } + + public void Dispose() { + // removes all + this.Plugin.Interface.RemoveChatLinkHandler(); + } +} diff --git a/Plugin.cs b/Plugin.cs index 952ae41..42b6f44 100644 --- a/Plugin.cs +++ b/Plugin.cs @@ -36,12 +36,14 @@ public class Plugin : IDalamudPlugin { internal IObjectTable ObjectTable { get; init; } internal Configuration Config { get; } + internal LinkHandlers LinkHandlers { get; } internal PluginUi Ui { get; } private Command Command { get; } public Plugin() { this.Config = this.Interface!.GetPluginConfig() as Configuration ?? new Configuration(); + this.LinkHandlers = new LinkHandlers(this); this.Ui = new PluginUi(this); this.Command = new Command(this); } @@ -49,6 +51,7 @@ public class Plugin : IDalamudPlugin { public void Dispose() { this.Command.Dispose(); this.Ui.Dispose(); + this.LinkHandlers.Dispose(); } internal void SaveConfig() {