From 31e1583655855175525a72e3c3e60fc4e2c71ecc Mon Sep 17 00:00:00 2001 From: Latif Khalifa Date: Tue, 4 Mar 2014 18:33:23 +0100 Subject: [PATCH] RAD-463: Newly created accounts don't have trash folder --- .../GUI/Consoles/Inventory/InventoryConsole.cs | 36 +++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/Radegast/GUI/Consoles/Inventory/InventoryConsole.cs b/Radegast/GUI/Consoles/Inventory/InventoryConsole.cs index b0d03c4..8a0f27d 100644 --- a/Radegast/GUI/Consoles/Inventory/InventoryConsole.cs +++ b/Radegast/GUI/Consoles/Inventory/InventoryConsole.cs @@ -75,6 +75,7 @@ namespace Radegast private InvNodeSorter sorter; private List QueuedFolders = new List(); private Dictionary FolderFetchRetries = new Dictionary(); + AutoResetEvent trashCreated = new AutoResetEvent(false); #region Construction and disposal public InventoryConsole(RadegastInstance instance) @@ -299,6 +300,11 @@ namespace Radegast void Inventory_InventoryObjectAdded(object sender, InventoryObjectAddedEventArgs e) { + if (e.Obj is InventoryFolder && ((InventoryFolder)e.Obj).PreferredType == AssetType.TrashFolder) + { + trashCreated.Set(); + } + if (TreeUpdateInProgress) { lock (ItemsToAdd) @@ -1690,7 +1696,21 @@ namespace Radegast 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": @@ -1786,6 +1806,20 @@ namespace Radegast 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; -- 2.11.0