Inventory subfolders working again in grid mode.

afrisby
Brian McBee 2008-01-05 18:50:00 +00:00
parent d430b7d815
commit b96da29d1a
1 changed files with 62 additions and 60 deletions

View File

@ -949,10 +949,13 @@ namespace OpenSim.Region.ClientStack
Encoding enc = Encoding.ASCII; Encoding enc = Encoding.ASCII;
uint FULL_MASK_PERMISSIONS = 2147483647; uint FULL_MASK_PERMISSIONS = 2147483647;
InventoryDescendentsPacket descend;
int i;
int count;
if (fetchItems) if (fetchItems)
{ {
InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID); descend = CreateInventoryDescendentsPacket(ownerID, folderID);
if (items.Count < MAX_ITEMS_PER_PACKET) if (items.Count < MAX_ITEMS_PER_PACKET)
{ {
@ -974,8 +977,8 @@ namespace OpenSim.Region.ClientStack
descend.AgentData.Descendents += folders.Count; descend.AgentData.Descendents += folders.Count;
} }
int count = 0; count = 0;
int i = 0; i = 0;
foreach (InventoryItemBase item in items) foreach (InventoryItemBase item in items)
{ {
descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock(); descend.ItemData[i] = new InventoryDescendentsPacket.ItemDataBlock();
@ -990,14 +993,14 @@ namespace OpenSim.Region.ClientStack
descend.ItemData[i].FolderID = item.parentFolderID; descend.ItemData[i].FolderID = item.parentFolderID;
descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000"); descend.ItemData[i].GroupID = new LLUUID("00000000-0000-0000-0000-000000000000");
descend.ItemData[i].GroupMask = 0; descend.ItemData[i].GroupMask = 0;
descend.ItemData[i].InvType = (sbyte) item.invType; descend.ItemData[i].InvType = (sbyte)item.invType;
descend.ItemData[i].Name = Helpers.StringToField(item.inventoryName); descend.ItemData[i].Name = Helpers.StringToField(item.inventoryName);
descend.ItemData[i].NextOwnerMask = item.inventoryNextPermissions; descend.ItemData[i].NextOwnerMask = item.inventoryNextPermissions;
descend.ItemData[i].OwnerID = item.avatarID; descend.ItemData[i].OwnerID = item.avatarID;
descend.ItemData[i].OwnerMask = item.inventoryCurrentPermissions; descend.ItemData[i].OwnerMask = item.inventoryCurrentPermissions;
descend.ItemData[i].SalePrice = 0; descend.ItemData[i].SalePrice = 0;
descend.ItemData[i].SaleType = 0; descend.ItemData[i].SaleType = 0;
descend.ItemData[i].Type = (sbyte) item.assetType; descend.ItemData[i].Type = (sbyte)item.assetType;
descend.ItemData[i].CRC = descend.ItemData[i].CRC =
Helpers.InventoryCRC(descend.ItemData[i].CreationDate, descend.ItemData[i].SaleType, Helpers.InventoryCRC(descend.ItemData[i].CreationDate, descend.ItemData[i].SaleType,
descend.ItemData[i].InvType, descend.ItemData[i].Type, descend.ItemData[i].InvType, descend.ItemData[i].Type,
@ -1040,69 +1043,68 @@ namespace OpenSim.Region.ClientStack
} }
//send subfolders //send subfolders
if (fetchFolders)
descend = CreateInventoryDescendentsPacket(ownerID, folderID);
if (folders.Count < MAX_ITEMS_PER_PACKET)
{ {
InventoryDescendentsPacket descend = CreateInventoryDescendentsPacket(ownerID, folderID); descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[folders.Count];
descend.AgentData.Descendents = folders.Count;
}
else
{
descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[MAX_ITEMS_PER_PACKET];
descend.AgentData.Descendents = MAX_ITEMS_PER_PACKET;
}
if (folders.Count < MAX_ITEMS_PER_PACKET) // Not sure if this scenario ever actually occurs, but nonetheless we include the items
{ // count even if we're not sending item data for the same reasons as above.
descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[folders.Count]; if (!fetchItems)
descend.AgentData.Descendents = folders.Count; {
} descend.AgentData.Descendents += items.Count;
else }
{
descend.FolderData = new InventoryDescendentsPacket.FolderDataBlock[MAX_ITEMS_PER_PACKET];
descend.AgentData.Descendents = MAX_ITEMS_PER_PACKET;
}
// Not sure if this scenario ever actually occurs, but nonetheless we include the items i = 0;
// count even if we're not sending item data for the same reasons as above. count = 0;
if (!fetchItems) foreach (InventoryFolderBase folder in folders)
{ {
descend.AgentData.Descendents += items.Count; descend.FolderData[i] = new InventoryDescendentsPacket.FolderDataBlock();
} descend.FolderData[i].FolderID = folder.folderID;
descend.FolderData[i].Name = Helpers.StringToField(folder.name);
descend.FolderData[i].ParentID = folder.parentID;
descend.FolderData[i].Type = (sbyte)folder.type;
int i = 0; i++;
int count = 0; count++;
foreach (InventoryFolderBase folder in folders) if (i == MAX_ITEMS_PER_PACKET)
{
descend.FolderData[i] = new InventoryDescendentsPacket.FolderDataBlock();
descend.FolderData[i].FolderID = folder.folderID;
descend.FolderData[i].Name = Helpers.StringToField(folder.name);
descend.FolderData[i].ParentID = folder.parentID;
descend.FolderData[i].Type = (sbyte) folder.type;
i++;
count++;
if (i == MAX_ITEMS_PER_PACKET)
{
OutPacket(descend, ThrottleOutPacketType.Asset);
if ((folders.Count - count) > 0)
{
descend = CreateInventoryDescendentsPacket(ownerID, folderID);
if ((folders.Count - count) < MAX_ITEMS_PER_PACKET)
{
descend.FolderData =
new InventoryDescendentsPacket.FolderDataBlock[folders.Count - count];
descend.AgentData.Descendents = folders.Count - count;
}
else
{
descend.FolderData =
new InventoryDescendentsPacket.FolderDataBlock[MAX_ITEMS_PER_PACKET];
descend.AgentData.Descendents = MAX_ITEMS_PER_PACKET;
}
i = 0;
}
}
}
if (i < MAX_ITEMS_PER_PACKET)
{ {
OutPacket(descend, ThrottleOutPacketType.Asset); OutPacket(descend, ThrottleOutPacketType.Asset);
if ((folders.Count - count) > 0)
{
descend = CreateInventoryDescendentsPacket(ownerID, folderID);
if ((folders.Count - count) < MAX_ITEMS_PER_PACKET)
{
descend.FolderData =
new InventoryDescendentsPacket.FolderDataBlock[folders.Count - count];
descend.AgentData.Descendents = folders.Count - count;
}
else
{
descend.FolderData =
new InventoryDescendentsPacket.FolderDataBlock[MAX_ITEMS_PER_PACKET];
descend.AgentData.Descendents = MAX_ITEMS_PER_PACKET;
}
i = 0;
}
} }
} }
if (i < MAX_ITEMS_PER_PACKET)
{
OutPacket(descend, ThrottleOutPacketType.Asset);
}
} }
private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID) private InventoryDescendentsPacket CreateInventoryDescendentsPacket(LLUUID ownerID, LLUUID folderID)