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:
parent
7118d523cd
commit
91a1ba4086
2 changed files with 54 additions and 4 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in a new issue