diff --git a/SecondBotEvents/Commands/Inventory.cs b/SecondBotEvents/Commands/Inventory.cs index 7af0df7..61c819a 100644 --- a/SecondBotEvents/Commands/Inventory.cs +++ b/SecondBotEvents/Commands/Inventory.cs @@ -1075,6 +1075,30 @@ namespace SecondBotEvents.Commands return BasicReply(HelperInventory.MapFolderInventoryJson(GetClient(), folder), [folderUUID]); } + [About("Checks if the inventory preload is done")] + [ReturnHints("Ready")] + [ReturnHintsFailure("Not ready")] + [CmdTypeGet()] + public object InventoryPreloadDone() + { + if (master.DataStoreService.preloadInventoryReady() == false) + { + return Failure("Not ready"); + } + else + { + return BasicReply("Ready"); + } + } + + [About("Requests the number of folders preloaded")] + [ReturnHints("number of preloaded folders")] + [CmdTypeGet()] + public object InventoryPreloadFolderCount() + { + return BasicReply(master.DataStoreService.GetPreloadedFolderCount().ToString()); + } + [About("Requests the mapped inventory on the bot using catched data only")] [ReturnHints("a json data object with: " + @@ -1096,17 +1120,19 @@ namespace SecondBotEvents.Commands InventoryNodeEntry myentry = new InventoryNodeEntry(); myentry.Name = name; myentry.UUID = folder.Guid.ToString(); - myentry.InventoryType = "folder"; + myentry.InventoryType = "Folder"; List folderlist = GetClient().Inventory.Store.GetContents(folder); foreach (InventoryBase entry in folderlist) { - if(entry is InventoryFolder) + + if (entry is InventoryFolder) { myentry.Children.Add(LoadInventoryNode(entry.UUID, entry.Name)); } else if (entry is InventoryItem) { - myentry.Children.Add(new InventoryNodeEntry() { Children = null, InventoryType = "item", Name = entry.Name, UUID = entry.UUID.ToString() }); + string entrytype = entry.GetType().Name.Replace("Inventory", ""); + myentry.Children.Add(new InventoryNodeEntry() { Children = null, InventoryType = entrytype, Name = entry.Name, UUID = entry.UUID.ToString() }); } } return myentry; diff --git a/SecondBotEvents/Services/DataStoreService.cs b/SecondBotEvents/Services/DataStoreService.cs index 8629caa..9e84496 100644 --- a/SecondBotEvents/Services/DataStoreService.cs +++ b/SecondBotEvents/Services/DataStoreService.cs @@ -1024,6 +1024,28 @@ namespace SecondBotEvents.Services protected List preloadingFolders = []; protected bool preloadDone = true; + public int preloadFolderCount = 0; + + public int GetPreloadedFolderCount() + { + return preloadFolderCount; + } + public bool preloadInventoryReady() + { + if(myConfig.GetPrefetchInventory() == false) + { + return true; + } + else if(preloadFolderCount == 0) + { + return false; + } + else if(preloadingFolders.Count() > 0) + { + return false; + } + return true; + } protected async void preloadFolder(string foldername,UUID folder, int maxDepth, int currentDepth) { @@ -1040,7 +1062,8 @@ namespace SecondBotEvents.Services InventorySortOrder.ByName, TimeSpan.FromSeconds(30), false); foreach (InventoryBase item in foldercontents) { - if (item is InventoryFolder == false) + string entrytype = item.GetType().Name.Replace("Inventory", ""); + if (entrytype != "Folder") { continue; } @@ -1052,6 +1075,7 @@ namespace SecondBotEvents.Services } lock (preloadingFolders) { + preloadFolderCount++; preloadingFolders.Remove(folder.Guid.ToString()); } });