Disable code to get server-side to move given items to a destination folder on TaskInventoryAccepted.

This is because the fixes to inventory versioning (so that they better match viewer expections)
now appear to allow the viewer to execute #RLV moves, as happens on the LL grid.
Doing it again server-side now wrongly creates another child #RLV folder underneath the root one.
As per http://opensimulator.org/mantis/view.php?id=6311
integration
Justin Clark-Casey (justincc) 2012-11-13 04:15:21 +00:00
parent 48577af325
commit f605a62427
1 changed files with 70 additions and 67 deletions

View File

@ -298,73 +298,76 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
}
}
// XXX: This code was placed here to try and accomdate RLV which moves given folders named #RLV/~<name>
// to a folder called name in #RLV. However, this approach may not be ultimately correct - from analysis
// of Firestorm 4.2.2 on sending an InventoryOffered instead of TaskInventoryOffered (as was previously
// done), the viewer itself would appear to move and rename the folder, rather than the simulator doing it here.
else if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted)
{
UUID destinationFolderID = UUID.Zero;
if (im.binaryBucket != null && im.binaryBucket.Length >= 16)
{
destinationFolderID = new UUID(im.binaryBucket, 0);
}
if (destinationFolderID != UUID.Zero)
{
InventoryFolderBase destinationFolder = new InventoryFolderBase(destinationFolderID, client.AgentId);
if (destinationFolder == null)
{
m_log.WarnFormat(
"[INVENTORY TRANSFER]: TaskInventoryAccepted message from {0} in {1} specified folder {2} which does not exist",
client.Name, scene.Name, destinationFolderID);
return;
}
IInventoryService invService = scene.InventoryService;
UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId);
item = invService.GetItem(item);
InventoryFolderBase folder = null;
UUID? previousParentFolderID = null;
if (item != null) // It's an item
{
previousParentFolderID = item.Folder;
item.Folder = destinationFolderID;
invService.DeleteItems(item.Owner, new List<UUID>() { item.ID });
scene.AddInventoryItem(client, item);
}
else
{
folder = new InventoryFolderBase(inventoryID, client.AgentId);
folder = invService.GetFolder(folder);
if (folder != null) // It's a folder
{
previousParentFolderID = folder.ParentID;
folder.ParentID = destinationFolderID;
invService.MoveFolder(folder);
}
}
// Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code).
if (previousParentFolderID != null)
{
InventoryFolderBase previousParentFolder
= new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId);
previousParentFolder = invService.GetFolder(previousParentFolder);
scene.SendInventoryUpdate(client, previousParentFolder, true, true);
scene.SendInventoryUpdate(client, destinationFolder, true, true);
}
}
}
// Disabled for now as it looks like http://opensimulator.org/mantis/view.php?id=6311 was fixed by fixes
// to inventory folder versioning allowing the viewer to move the received folder itself as happens on the
// LL grid. Doing it again server-side then wrongly does a second create and move
// // XXX: This code was placed here to try and accomdate RLV which moves given folders named #RLV/~<name>
// // to a folder called name in #RLV. However, this approach may not be ultimately correct - from analysis
// // of Firestorm 4.2.2 on sending an InventoryOffered instead of TaskInventoryOffered (as was previously
// // done), the viewer itself would appear to move and rename the folder, rather than the simulator doing it here.
// else if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted)
// {
// UUID destinationFolderID = UUID.Zero;
//
// if (im.binaryBucket != null && im.binaryBucket.Length >= 16)
// {
// destinationFolderID = new UUID(im.binaryBucket, 0);
// }
//
// if (destinationFolderID != UUID.Zero)
// {
// InventoryFolderBase destinationFolder = new InventoryFolderBase(destinationFolderID, client.AgentId);
// if (destinationFolder == null)
// {
// m_log.WarnFormat(
// "[INVENTORY TRANSFER]: TaskInventoryAccepted message from {0} in {1} specified folder {2} which does not exist",
// client.Name, scene.Name, destinationFolderID);
//
// return;
// }
//
// IInventoryService invService = scene.InventoryService;
//
// UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip
//
// InventoryItemBase item = new InventoryItemBase(inventoryID, client.AgentId);
// item = invService.GetItem(item);
// InventoryFolderBase folder = null;
// UUID? previousParentFolderID = null;
//
// if (item != null) // It's an item
// {
// previousParentFolderID = item.Folder;
// item.Folder = destinationFolderID;
//
// invService.DeleteItems(item.Owner, new List<UUID>() { item.ID });
// scene.AddInventoryItem(client, item);
// }
// else
// {
// folder = new InventoryFolderBase(inventoryID, client.AgentId);
// folder = invService.GetFolder(folder);
//
// if (folder != null) // It's a folder
// {
// previousParentFolderID = folder.ParentID;
// folder.ParentID = destinationFolderID;
// invService.MoveFolder(folder);
// }
// }
//
// // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code).
// if (previousParentFolderID != null)
// {
// InventoryFolderBase previousParentFolder
// = new InventoryFolderBase((UUID)previousParentFolderID, client.AgentId);
// previousParentFolder = invService.GetFolder(previousParentFolder);
// scene.SendInventoryUpdate(client, previousParentFolder, true, true);
//
// scene.SendInventoryUpdate(client, destinationFolder, true, true);
// }
// }
// }
else if (
im.dialog == (byte)InstantMessageDialog.InventoryDeclined
|| im.dialog == (byte)InstantMessageDialog.TaskInventoryDeclined)