From 13fc38e81f1af1be9e58ee40f072c0211be8ee06 Mon Sep 17 00:00:00 2001 From: Madpeter <57852827+Madpeterz@users.noreply.github.com> Date: Sat, 21 Aug 2021 02:33:47 +0100 Subject: [PATCH] Inventory commands corrects UUID check for rez object, adds new inventoryfolders limited command. --- Core/Commands/Inventory.cs | 22 +++++++++++++++++++--- Core/Static/Inventory.cs | 26 ++++++++++++++++++++++---- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/Core/Commands/Inventory.cs b/Core/Commands/Inventory.cs index d74fa5d..d3d47f0 100644 --- a/Core/Commands/Inventory.cs +++ b/Core/Commands/Inventory.cs @@ -28,14 +28,14 @@ namespace BetterSecondBot.HttpService { return Failure("Token not accepted", "RezObject", new [] { item }); } - if (UUID.TryParse(item, out UUID targetitem) == true) + if (UUID.TryParse(item, out UUID targetitem) == false) { - return Failure("Invaild item UUID", "RezObject", new [] { item }); + return Failure("Invaild item UUID: "+ item, "RezObject", new [] { item }); } InventoryItem itm = bot.GetClient.Inventory.FetchItem(targetitem, bot.GetClient.Self.AgentID, (5 * 1000)); if (itm == null) { - return Failure("Unable to find item", "RezObject", new [] { item }); + return Failure("Unable to find item: " + item, "RezObject", new [] { item }); } UUID rezedobject = bot.GetClient.Inventory.RequestRezFromInventory(bot.GetClient.Network.CurrentSim, bot.GetClient.Self.SimRotation, bot.GetClient.Self.RelativePosition, itm); return BasicReply(rezedobject.ToString(), "RezObject", new [] { item }); @@ -432,6 +432,22 @@ namespace BetterSecondBot.HttpService return Failure("Error", "InventoryFolders"); } + [About("Requests folders limited to selected folder")] + [ArgHints("targetfolder", "URLARG", "the UUID of the folder or root")] + [ReturnHints("single InventoryMapFolder")] + [ReturnHints("Error")] + [Route(HttpVerbs.Get, "/InventoryFoldersLimited/{targetfolder}/{token}")] + public object InventoryFoldersLimited(string targetfolder,string token) + { + if (tokens.Allow(token, "inventory", "InventoryFoldersLimited", handleGetClientIP()) == false) + { + return Failure("Token not accepted", "InventoryFoldersLimited"); + } + string reply = HelperInventory.MapFolderJson(bot, targetfolder,false); + if (reply != null) return BasicReply(reply, "InventoryFoldersLimited"); + return Failure("Error", "InventoryFoldersLimited"); + } + [About("Requests the contents of a folder as an array of InventoryMapItem
Formated as follows
InventoryMapItem
")] [ReturnHints("array of InventoryMapItem")] [ReturnHints("Invaild folder UUID")] diff --git a/Core/Static/Inventory.cs b/Core/Static/Inventory.cs index 0f068b7..ff910fc 100644 --- a/Core/Static/Inventory.cs +++ b/Core/Static/Inventory.cs @@ -113,19 +113,34 @@ namespace BetterSecondBot.Static return new KeyValuePair(foldername,output.ToString()); } - public static string MapFolderJson(CommandsBot bot) + public static string MapFolderJson(CommandsBot bot,string targetFolder="root", bool subfolders = true) { if (bot.GetClient.Inventory.Store != null) { if (bot.GetClient.Inventory.Store.RootFolder != null) { - return JsonConvert.SerializeObject(DoMapFolderJson(bot, bot.GetClient.Inventory.Store.RootFolder)); + InventoryFolder topLevel = null; + if (targetFolder == "root") + { + topLevel = bot.GetClient.Inventory.Store.RootFolder; + } + else + { + if(UUID.TryParse(targetFolder, out UUID folderUUID) == true) + { + topLevel = new InventoryFolder(folderUUID); + } + } + if (topLevel != null) + { + return JsonConvert.SerializeObject(DoMapFolderJson(bot, topLevel, subfolders)); + } } } return null; } - public static InventoryMapFolder DoMapFolderJson(CommandsBot bot, InventoryFolder folder) + public static InventoryMapFolder DoMapFolderJson(CommandsBot bot, InventoryFolder folder, bool subfolders=true) { InventoryMapFolder ReplyFolder = new InventoryMapFolder(); ReplyFolder.id = folder.UUID.ToString(); @@ -136,7 +151,10 @@ namespace BetterSecondBot.Static { if (R.GetType() == typeof(InventoryFolder)) { - ReplyFolder.subfolders.Add(DoMapFolderJson(bot, (InventoryFolder)R)); + if (subfolders == true) + { + ReplyFolder.subfolders.Add(DoMapFolderJson(bot, (InventoryFolder)R, subfolders)); + } } } return ReplyFolder;