private InvNodeSorter sorter;
private List<UUID> QueuedFolders = new List<UUID>();
private Dictionary<UUID, int> FolderFetchRetries = new Dictionary<UUID, int>();
+ AutoResetEvent trashCreated = new AutoResetEvent(false);
#region Construction and disposal
public InventoryConsole(RadegastInstance instance)
void Inventory_InventoryObjectAdded(object sender, InventoryObjectAddedEventArgs e)
{
+ if (e.Obj is InventoryFolder && ((InventoryFolder)e.Obj).PreferredType == AssetType.TrashFolder)
+ {
+ trashCreated.Set();
+ }
+
if (TreeUpdateInProgress)
{
lock (ItemsToAdd)
case "delete_folder":
- client.Inventory.MoveFolder(f.UUID, client.Inventory.FindFolderForType(AssetType.TrashFolder), f.Name);
+ var trash = client.Inventory.FindFolderForType(AssetType.TrashFolder);
+ if (trash == Inventory.RootFolder.UUID)
+ {
+ WorkPool.QueueUserWorkItem(sync =>
+ {
+ trashCreated.Reset();
+ trash = client.Inventory.CreateFolder(Inventory.RootFolder.UUID, "Trash", AssetType.TrashFolder);
+ trashCreated.WaitOne(20 * 1000, false);
+ Thread.Sleep(200);
+ client.Inventory.MoveFolder(f.UUID, trash, f.Name);
+ return;
+ });
+ }
+
+ client.Inventory.MoveFolder(f.UUID, trash, f.Name);
break;
case "empty_trash":
break;
case "delete_item":
+ var trash = client.Inventory.FindFolderForType(AssetType.TrashFolder);
+ if (trash == Inventory.RootFolder.UUID)
+ {
+ WorkPool.QueueUserWorkItem(sync =>
+ {
+ trashCreated.Reset();
+ trash = client.Inventory.CreateFolder(Inventory.RootFolder.UUID, "Trash", AssetType.TrashFolder);
+ trashCreated.WaitOne(20 * 1000, false);
+ Thread.Sleep(200);
+ client.Inventory.MoveItem(item.UUID, trash, item.Name);
+ return;
+ });
+ }
+
client.Inventory.MoveItem(item.UUID, client.Inventory.FindFolderForType(AssetType.TrashFolder), item.Name);
break;