diff --git a/Dalamud/Dalamud.cs b/Dalamud/Dalamud.cs index fe7b45545..6c39c07c4 100644 --- a/Dalamud/Dalamud.cs +++ b/Dalamud/Dalamud.cs @@ -177,7 +177,7 @@ namespace Dalamud { CommandManager.AddHandler("/xlitem", new CommandInfo(OnItemLinkCommand) { - HelpMessage = "Link an item by name. Usage: /xlitem " + HelpMessage = "Link an item by name. Usage: /xlitem . For matching an item exactly, use /xlitem +" }); #if DEBUG @@ -390,9 +390,16 @@ namespace Dalamud { } private void OnItemLinkCommand(string command, string arguments) { + var exactSearch = false; + if (arguments.StartsWith("+")) + { + exactSearch = true; + arguments = arguments.Substring(1); + } + Task.Run(async () => { try { - dynamic results = await XivApi.Search(arguments, "Item", 1); + dynamic results = await XivApi.Search(arguments, "Item", 1, exactSearch); var itemId = (short) results.Results[0].ID; var itemName = (string)results.Results[0].Name; diff --git a/Dalamud/XivApi.cs b/Dalamud/XivApi.cs index dc5e5fa8b..9d2374281 100644 --- a/Dalamud/XivApi.cs +++ b/Dalamud/XivApi.cs @@ -49,10 +49,16 @@ namespace Dalamud return await Get("ContentFinderCondition/" + contentFinderCondition); } - public static async Task Search(string query, string indexes, int limit = 100) { + public static async Task Search(string query, string indexes, int limit = 100, bool exact = false) { query = System.Net.WebUtility.UrlEncode(query); - return await Get("search" + $"?string={query}&indexes={indexes}&limit={limit}"); + var queryString = $"?string={query}&indexes={indexes}&limit={limit}"; + if (exact) + { + queryString += "&string_algo=match"; + } + + return await Get("search" + queryString); } public static async Task GetMarketInfoWorld(int itemId, string worldName) {