diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
index 15066cd734..c5bbd6a22b 100644
--- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
+++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
@@ -202,6 +202,25 @@ namespace OpenSim.Framework.Communications.Cache
m_rootFolder = null;
}
}
+
+ ///
+ /// Fetch inventory for this user.
+ ///
+ /// This has to be executed as a separate step once user information is retreived.
+ /// This will occur synchronously if the inventory service is in the same process as this class, and
+ /// asynchronously otherwise.
+ public void FetchInventory()
+ {
+ if (m_commsManager.SecureInventoryService != null)
+ {
+ m_commsManager.SecureInventoryService.RequestInventoryForUser(
+ UserProfile.ID, SessionID, InventoryReceive);
+ }
+ else
+ {
+ m_commsManager.InventoryService.RequestInventoryForUser(UserProfile.ID, InventoryReceive);
+ }
+ }
///
/// Callback invoked when the inventory is received from an async request to the inventory service
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
index ef190c8970..b1ce3e78c4 100644
--- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
+++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs
@@ -104,36 +104,6 @@ namespace OpenSim.Framework.Communications.Cache
return false;
}
- ///
- /// Request the inventory data for the given user. This will occur asynchronously if running on a grid
- ///
- ///
- ///
- public void RequestInventoryForUser(UUID userID)
- {
- CachedUserInfo userInfo = GetUserDetails(userID);
- if (userInfo != null)
- {
- if (m_commsManager.SecureInventoryService != null)
- {
- m_commsManager.SecureInventoryService.RequestInventoryForUser(userID, userInfo.SessionID, userInfo.InventoryReceive);
- }
- else
- {
- m_commsManager.InventoryService.RequestInventoryForUser(userID, userInfo.InventoryReceive);
- }
- //IInventoryServices invService = userInfo.GetInventoryService();
- //if (invService != null)
- //{
- // invService.RequestInventoryForUser(userID, userInfo.InventoryReceive);
- //}
- }
- else
- {
- m_log.ErrorFormat("[USER CACHE]: RequestInventoryForUser() - user profile for user {0} not found", userID);
- }
- }
-
///
/// Get cached details of the given user. If the user isn't in cache then the user is requested from the
/// profile service.
diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs
index cda9d5c66f..e2576ef86f 100644
--- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs
+++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs
@@ -64,7 +64,7 @@ namespace OpenSim.Framework.Communications.Tests
/// Test requesting inventory for a user
///
[Test]
- public void TestRequestInventoryForUser()
+ public void TestFetchInventory()
{
TestCommunicationsManager commsManager = new TestCommunicationsManager();
CachedUserInfo userInfo = UserProfileTestUtils.CreateUserWithInventory(commsManager);
diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs
index 85cc940881..93ce9167bf 100644
--- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs
+++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileTestUtils.cs
@@ -59,9 +59,10 @@ namespace OpenSim.Framework.Communications.Tests
lus.AddUser("Bill", "Bailey", "troll", "bill@bailey.com", 1000, 1000, userId);
- commsManager.UserProfileCacheService.RequestInventoryForUser(userId);
+ CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userId);
+ userInfo.FetchInventory();
- return commsManager.UserProfileCacheService.GetUserDetails(userId);
+ return userInfo;
}
}
}
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index e366c791fb..847d32d3df 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -472,7 +472,7 @@ namespace OpenSim.Region.Framework.Scenes
if (recipientUserInfo != null)
{
if (!recipientUserInfo.HasReceivedInventory)
- CommsManager.UserProfileCacheService.RequestInventoryForUser(recipient);
+ recipientUserInfo.FetchInventory();
// Insert a copy of the item into the recipient
InventoryItemBase itemCopy = new InventoryItemBase();
@@ -1202,7 +1202,8 @@ namespace OpenSim.Region.Framework.Scenes
avatarId);
}
if (!profile.HasReceivedInventory)
- CommsManager.UserProfileCacheService.RequestInventoryForUser(avatarId);
+ profile.FetchInventory();
+
InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId);
if (agentItem == null)
@@ -1841,8 +1842,7 @@ namespace OpenSim.Region.Framework.Scenes
// Async inventory requests will queue, but they will never
// execute unless inventory is actually fetched
//
- CommsManager.UserProfileCacheService.RequestInventoryForUser(
- userInfo.UserProfile.ID);
+ userInfo.FetchInventory();
}
if (userInfo != null)
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 0ed35afe68..2dd305a916 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -847,7 +847,13 @@ namespace OpenSim.Region.Framework.Scenes
//SendAnimPack();
m_scene.SwapRootAgentCount(false);
- m_scene.CommsManager.UserProfileCacheService.RequestInventoryForUser(m_uuid);
+
+ CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(m_uuid);
+ if (userInfo != null)
+ userInfo.FetchInventory();
+ else
+ m_log.ErrorFormat("[SCENE]: Could not find user info for {0} when making it a root agent", m_uuid);
+
//m_scene.CapsModule.AddCapsHandler(m_uuid);
// On the next prim update, all objects will be sent
@@ -2504,8 +2510,9 @@ namespace OpenSim.Region.Framework.Scenes
}
else
{
- // Restore the user structures that we needed to delete before asking the receiving region to complete the crossing
- m_scene.CommsManager.UserProfileCacheService.RequestInventoryForUser(UUID);
+ // Restore the user structures that we needed to delete before asking the receiving region
+ // to complete the crossing
+ userInfo.FetchInventory();
m_scene.CapsModule.AddCapsHandler(UUID);
}
}