diff --git a/Dalamud/DalamudCommands.cs b/Dalamud/DalamudCommands.cs index a231c6c54..9edce0b79 100644 --- a/Dalamud/DalamudCommands.cs +++ b/Dalamud/DalamudCommands.cs @@ -54,6 +54,10 @@ namespace Dalamud HelpMessage = Loc.Localize("DalamudUnmuteHelp", "Unmute a word or sentence. Usage: /xlunmute ") }); + this.dalamud.CommandManager.AddHandler("/ll", new CommandInfo(OnLastLinkCommand) { + HelpMessage = Loc.Localize("DalamudLastLinkHelp", "Open the last posted link in your default browser.") + }); + this.dalamud.CommandManager.AddHandler("/xlbgmset", new CommandInfo(OnBgmSetCommand) { HelpMessage = Loc.Localize("DalamudBgmSetHelp", "Set the Game background music. Usage: /xlbgmset ") @@ -171,6 +175,16 @@ namespace Dalamud string.Format(Loc.Localize("DalamudUnmuted", "Unmuted \"{0}\"."), arguments)); } + private void OnLastLinkCommand(string command, string arguments) { + if (string.IsNullOrEmpty(this.dalamud.ChatHandlers.LastLink)) { + this.dalamud.Framework.Gui.Chat.Print(Loc.Localize("DalamudNoLastLink", "No last link...")); + return; + } + + this.dalamud.Framework.Gui.Chat.Print(string.Format(Loc.Localize("DalamudOpeningLink", "Opening {0}"), this.dalamud.ChatHandlers.LastLink)); + Process.Start(this.dalamud.ChatHandlers.LastLink); + } + private void OnBgmSetCommand(string command, string arguments) { this.dalamud.Framework.Gui.SetBgm(ushort.Parse(arguments)); } diff --git a/Dalamud/Game/ChatHandlers.cs b/Dalamud/Game/ChatHandlers.cs index 0621337a9..cf491e629 100644 --- a/Dalamud/Game/ChatHandlers.cs +++ b/Dalamud/Game/ChatHandlers.cs @@ -78,8 +78,14 @@ namespace Dalamud.Game { } }; + private readonly Regex urlRegex = + new Regex(@"((http|ftp|https)://)?([\w_-]+(?:(?:\.[\w_-]+)+))([\w.,@?^=%&:/~+#-]*[\w@?^=%&/~+#-])?", + RegexOptions.Compiled); + private bool hasSeenLoadingMsg; + public string LastLink { get; private set; } + public ChatHandlers(Dalamud dalamud) { this.dalamud = dalamud; @@ -160,6 +166,9 @@ namespace Dalamud.Game { var messageCopy = message; var senderCopy = sender; + var linkMatch = this.urlRegex.Match(message.TextValue); + if (linkMatch.Value.Length > 0) + LastLink = linkMatch.Value; // Handle all of this with SeString some day /*