From 44ce068d6cd8afe3780b26f77d2a1b39ac81ef44 Mon Sep 17 00:00:00 2001 From: Melanie Date: Sun, 11 Mar 2012 18:21:47 +0100 Subject: [PATCH] Allow RLV to redirect received folders to #RLV folder --- .../Transfer/InventoryTransferModule.cs | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index da708d2bee..80554fb3aa 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs @@ -268,6 +268,39 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer else if (im.dialog == (byte) InstantMessageDialog.InventoryAccepted || im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) { + UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip + IInventoryService invService = scene.InventoryService; + + // Special case: folder redirect. + // RLV uses this + if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) + { + InventoryFolderBase folder = new InventoryFolderBase(inventoryID, client.AgentId); + folder = invService.GetFolder(folder); + + if (folder != null) + { + if (im.binaryBucket.Length >= 16) + { + UUID destFolderID = new UUID(im.binaryBucket, 0); + if (destFolderID != UUID.Zero) + { + InventoryFolderBase destFolder = new InventoryFolderBase(destFolderID, client.AgentId); + destFolder = invService.GetFolder(destFolder); + if (destFolder != null) + { + if (folder.ParentID != destFolder.ID) + { + folder.ParentID = destFolder.ID; + invService.MoveFolder(folder); + client.SendBulkUpdateInventory(folder); + } + } + } + } + } + } + ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); if (user != null) // Local