diff options
author | Justin Clark-Casey (justincc) | 2011-05-13 03:24:19 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2011-05-27 01:22:03 +0100 |
commit | d2aea3ef59f93decf7330efd2aedff7b74cf356c (patch) | |
tree | ae53e1914d85a253354c147500d71e17c3b0153f /OpenSim | |
parent | Add a smidgen of method doc about the fact that item links reuse the asset id... (diff) | |
download | opensim-SC_OLD-d2aea3ef59f93decf7330efd2aedff7b74cf356c.zip opensim-SC_OLD-d2aea3ef59f93decf7330efd2aedff7b74cf356c.tar.gz opensim-SC_OLD-d2aea3ef59f93decf7330efd2aedff7b74cf356c.tar.bz2 opensim-SC_OLD-d2aea3ef59f93decf7330efd2aedff7b74cf356c.tar.xz |
Fix broken inventory links on viewer 2.
It appears that if the viewer requests a folder containing links, we must also send the folders that contain the link targets first.
This was tested with Kokua 0.1.0 WIP though I predict it will also work with other viewer 2s
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | 7 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 21 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | 4 |
3 files changed, 29 insertions, 3 deletions
diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index ad015e7..0e448d1 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs | |||
@@ -1607,14 +1607,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP | |||
1607 | currentPacket.ItemData[itemsSent % MAX_ITEMS_PER_PACKET] = CreateItemDataBlock(items[itemsSent++]); | 1607 | currentPacket.ItemData[itemsSent % MAX_ITEMS_PER_PACKET] = CreateItemDataBlock(items[itemsSent++]); |
1608 | else | 1608 | else |
1609 | { | 1609 | { |
1610 | // m_log.DebugFormat( | ||
1611 | // "[LLCLIENTVIEW]: Sending inventory folder details packet to {0} for folder {1}", Name, folderID); | ||
1610 | OutPacket(currentPacket, ThrottleOutPacketType.Asset, false); | 1612 | OutPacket(currentPacket, ThrottleOutPacketType.Asset, false); |
1611 | currentPacket = null; | 1613 | currentPacket = null; |
1612 | } | 1614 | } |
1613 | |||
1614 | } | 1615 | } |
1615 | 1616 | ||
1616 | if (currentPacket != null) | 1617 | if (currentPacket != null) |
1618 | { | ||
1619 | // m_log.DebugFormat( | ||
1620 | // "[LLCLIENTVIEW]: Sending inventory folder details packet to {0} for folder {1}", Name, folderID); | ||
1617 | OutPacket(currentPacket, ThrottleOutPacketType.Asset, false); | 1621 | OutPacket(currentPacket, ThrottleOutPacketType.Asset, false); |
1622 | } | ||
1618 | } | 1623 | } |
1619 | 1624 | ||
1620 | private InventoryDescendentsPacket.FolderDataBlock CreateFolderDataBlock(InventoryFolderBase folder) | 1625 | private InventoryDescendentsPacket.FolderDataBlock CreateFolderDataBlock(InventoryFolderBase folder) |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a65ceeb..3bf2c2b 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1382,11 +1382,28 @@ namespace OpenSim.Region.Framework.Scenes | |||
1382 | InventoryFolderBase containingFolder = new InventoryFolderBase(folder.ID, client.AgentId); | 1382 | InventoryFolderBase containingFolder = new InventoryFolderBase(folder.ID, client.AgentId); |
1383 | containingFolder = InventoryService.GetFolder(containingFolder); | 1383 | containingFolder = InventoryService.GetFolder(containingFolder); |
1384 | 1384 | ||
1385 | //m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}", | 1385 | // m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}", |
1386 | // contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName); | 1386 | // contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName); |
1387 | 1387 | ||
1388 | if (containingFolder != null && containingFolder != null) | 1388 | if (containingFolder != null && containingFolder != null) |
1389 | { | ||
1390 | // If the folder requested contains links, then we need to send those folders first, otherwise the links | ||
1391 | // will be broken in the viewer. | ||
1392 | HashSet<UUID> linkedItemFolderIdsToSend = new HashSet<UUID>(); | ||
1393 | foreach (InventoryItemBase item in contents.Items) | ||
1394 | { | ||
1395 | if (item.AssetType == (int)AssetType.Link) | ||
1396 | { | ||
1397 | InventoryItemBase linkedItem = InventoryService.GetItem(new InventoryItemBase(item.AssetID)); | ||
1398 | linkedItemFolderIdsToSend.Add(linkedItem.Folder); | ||
1399 | } | ||
1400 | } | ||
1401 | |||
1402 | foreach (UUID linkedItemFolderId in linkedItemFolderIdsToSend) | ||
1403 | SendInventoryUpdate(client, new InventoryFolderBase(linkedItemFolderId), false, true); | ||
1404 | |||
1389 | client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, containingFolder.Version, fetchFolders, fetchItems); | 1405 | client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, containingFolder.Version, fetchFolders, fetchItems); |
1406 | } | ||
1390 | } | 1407 | } |
1391 | 1408 | ||
1392 | /// <summary> | 1409 | /// <summary> |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index ab567fb..e2d7208 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs | |||
@@ -499,6 +499,10 @@ namespace OpenSim.Region.Framework.Scenes | |||
499 | public void HandleFetchInventoryDescendents(IClientAPI remoteClient, UUID folderID, UUID ownerID, | 499 | public void HandleFetchInventoryDescendents(IClientAPI remoteClient, UUID folderID, UUID ownerID, |
500 | bool fetchFolders, bool fetchItems, int sortOrder) | 500 | bool fetchFolders, bool fetchItems, int sortOrder) |
501 | { | 501 | { |
502 | // m_log.DebugFormat( | ||
503 | // "[USER INVENTORY]: HandleFetchInventoryDescendents() for {0}, folder={1}, fetchFolders={2}, fetchItems={3}, sortOrder={4}", | ||
504 | // remoteClient.Name, folderID, fetchFolders, fetchItems, sortOrder); | ||
505 | |||
502 | if (folderID == UUID.Zero) | 506 | if (folderID == UUID.Zero) |
503 | return; | 507 | return; |
504 | 508 | ||