Add inventory preload status and folder count commands

Introduces two new commands to check if inventory preload is done and to request the number of preloaded folders. Updates inventory node mapping to use dynamic type names and improves folder preload tracking in DataStoreService.
This commit is contained in:
Madpeter 2025-10-03 00:50:54 +01:00
parent 7118d523cd
commit 91a1ba4086
2 changed files with 54 additions and 4 deletions

View file

@ -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<InventoryBase> 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;

View file

@ -1024,6 +1024,28 @@ namespace SecondBotEvents.Services
protected List<string> 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());
}
});