From 5ad4c79a4e5e2d6c9ba26034e5b325007f0b6f7a Mon Sep 17 00:00:00 2001
From: Justin Clarke Casey
Date: Thu, 10 Apr 2008 16:04:19 +0000
Subject: * Refactor GetUsersInventory()

---
 .../Grid/InventoryServer/GridInventoryService.cs   | 42 +++++++++++++++++-----
 1 file changed, 33 insertions(+), 9 deletions(-)

(limited to 'OpenSim/Grid')

diff --git a/OpenSim/Grid/InventoryServer/GridInventoryService.cs b/OpenSim/Grid/InventoryServer/GridInventoryService.cs
index ffff89f..e30c31e 100644
--- a/OpenSim/Grid/InventoryServer/GridInventoryService.cs
+++ b/OpenSim/Grid/InventoryServer/GridInventoryService.cs
@@ -43,7 +43,14 @@ namespace OpenSim.Grid.InventoryServer
         {
         }
 
-        private bool TryGetUsersInventory(LLUUID userID, out List<InventoryFolderBase> folderList,
+        /// <summary>
+        /// Get a user's inventory.
+        /// </summary>
+        /// <param name="userID"></param>
+        /// <param name="folderList"></param>
+        /// <param name="itemsList"></param>
+        /// <returns>true if the inventory was retrieved, false otherwise</returns>
+        private bool GetUsersInventory(LLUUID userID, out List<InventoryFolderBase> folderList,
                                           out List<InventoryItemBase> itemsList)
         {
             List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
@@ -93,22 +100,39 @@ namespace OpenSim.Grid.InventoryServer
         /// Return a user's entire inventory
         /// </summary>
         /// <param name="rawUserID"></param>
-        /// <returns></returns>
+        /// <returns>The user's inventory.  If an inventory cannot be found then an empty collection is returned.</returns>
         public InventoryCollection GetUserInventory(Guid rawUserID)
         {
             LLUUID userID = new LLUUID(rawUserID);
 
-            m_log.Info("[AGENT INVENTORY]: Processing request for inventory of " + userID.ToString());            
+            m_log.InfoFormat("[AGENT INVENTORY]: Processing request for inventory of {0}", userID);            
 
             InventoryCollection invCollection = new InventoryCollection();
-            List<InventoryFolderBase> folders;
-            List<InventoryItemBase> allItems;
-            if (TryGetUsersInventory(userID, out folders, out allItems))
+            
+            List<InventoryFolderBase> allFolders = GetInventorySkeleton(userID);
+            
+            if (null == allFolders)
+            {
+                m_log.WarnFormat("[AGENT INVENTORY]: No inventory found for user {0}", rawUserID);
+                
+                return invCollection;
+            }
+            
+            List<InventoryItemBase> allItems = new List<InventoryItemBase>();
+
+            foreach (InventoryFolderBase folder in allFolders)
             {
-                invCollection.AllItems = allItems;
-                invCollection.Folders = folders;
-                invCollection.UserID = userID;
+                List<InventoryItemBase> items = RequestFolderItems(folder.ID);
+                
+                if (items != null)
+                {
+                    allItems.InsertRange(0, items);
+                }
             }
+
+            invCollection.AllItems = allItems;
+            invCollection.Folders = allFolders;
+            invCollection.UserID = userID;
             
 //            foreach (InventoryFolderBase folder in folders)
 //            {
-- 
cgit v1.1