From 6b9cc6c48d7b49cc4bce5dce4e66d7856a093b75 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Thu, 13 Aug 2009 11:30:29 -0700
Subject: Inventory redirects from CachedUserInfo to InventoryService COMPLETE!

---
 .../Region/ClientStack/LindenUDP/LLClientView.cs   |  17 +-
 .../Agent/TextureDownload/TextureDownloadModule.cs |   4 +-
 .../Avatar/AvatarFactory/AvatarFactoryModule.cs    |  45 ++---
 .../World/Permissions/PermissionsModule.cs         |  46 +----
 .../Framework/Scenes/Hypergrid/HGAssetMapper.cs    |  50 +++---
 .../Scenes/Hypergrid/HGScene.Inventory.cs          |  31 ++--
 OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 194 +++++++--------------
 .../Framework/Scenes/Scene.PacketHandlers.cs       | 129 +-------------
 .../Framework/Scenes/SceneCommunicationService.cs  |  10 +-
 OpenSim/Region/Framework/Scenes/ScenePresence.cs   |  10 +-
 10 files changed, 146 insertions(+), 390 deletions(-)

diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
index 7633b7b..aaa236c 100644
--- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
+++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
@@ -6609,20 +6609,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP
                             }
                             else // Agent
                             {
-                                CachedUserInfo userInfo = ((Scene)m_scene).CommsManager.UserProfileCacheService.GetUserDetails(AgentId);
-                                if (userInfo == null)
-                                {
-                                    m_log.ErrorFormat(
-                                        "[CLIENT]: Could not resolve user {0} for caps inventory update",
-                                        AgentId);
-
-                                    break;
-                                }
-
-                                if (userInfo.RootFolder == null)
-                                    break;
-
-                                InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(itemID);
+                                //InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(itemID);
+                                IInventoryService invService = m_scene.RequestModuleInterface<IInventoryService>();
+                                InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(itemID));
                                 if (assetRequestItem == null)
                                 {
                                     assetRequestItem = ((Scene)m_scene).CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID);
diff --git a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs
index fa5369f..956dd10 100644
--- a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs
+++ b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs
@@ -37,6 +37,7 @@ using OpenSim.Framework.Communications.Cache;
 using OpenSim.Region.Framework.Interfaces;
 using OpenSim.Region.Framework.Scenes;
 using BlockingQueue = OpenSim.Framework.BlockingQueue<OpenSim.Region.Framework.Interfaces.ITextureSender>;
+using OpenSim.Services.Interfaces;
 
 namespace OpenSim.Region.CoreModules.Agent.TextureDownload
 {
@@ -217,7 +218,8 @@ namespace OpenSim.Region.CoreModules.Agent.TextureDownload
                     if (profile == null) // Deny unknown user
                         return;
 
-                    if (profile.RootFolder == null) // Deny no inventory
+                    IInventoryService invService = scene.InventoryService;
+                    if (invService.GetRootFolder(client.AgentId) == null) // Deny no inventory
                         return;
 
                     if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index 33dc7a5..547f923 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -34,6 +34,7 @@ using OpenSim.Framework;
 using OpenSim.Framework.Communications.Cache;
 using OpenSim.Region.Framework.Interfaces;
 using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
 
 namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
 {
@@ -115,9 +116,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
         }
 
 
-        public void SetAppearanceAssets(CachedUserInfo profile, ref AvatarAppearance appearance)
+        public void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance)
         {
-            if (profile.RootFolder != null)
+            IInventoryService invService = m_scene.InventoryService;
+
+            if (invService.GetRootFolder(userID) != null)
             {
                 for (int i = 0; i < 13; i++)
                 {
@@ -127,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                     }
                     else
                     {
-                        InventoryItemBase baseItem = profile.RootFolder.FindItem(appearance.Wearables[i].ItemID);
+                        InventoryItemBase baseItem = invService.QueryItem(new InventoryItemBase(appearance.Wearables[i].ItemID));
 
                         if (baseItem != null)
                         {
@@ -143,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
             }
             else
             {
-                m_log.Error("[APPEARANCE]: you have no inventory, appearance stuff isn't going to work");
+                m_log.WarnFormat("[APPEARANCE]: user {0} has no inventory, appearance isn't going to work", userID);
             }
         }
 
@@ -163,8 +166,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                 return;
             }
 
-            CachedUserInfo profile = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(clientView.AgentId);
-
             AvatarAppearance avatAppearance = null;
             if (!TryGetAvatarAppearance(clientView.AgentId, out avatAppearance)) 
             {
@@ -174,34 +175,18 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
             
             //m_log.DebugFormat("[APPEARANCE]: Received wearables for {0}", clientView.Name);
             
-            if (profile != null)
+            foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
             {
-                if (profile.RootFolder != null)
+                if (wear.Type < 13)
                 {
-                    foreach (AvatarWearingArgs.Wearable wear in e.NowWearing)
-                    {
-                        if (wear.Type < 13)
-                        {
-                            avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
-                        }
-                    }
-                    
-                    SetAppearanceAssets(profile, ref avatAppearance);
-
-                    m_scene.CommsManager.AvatarService.UpdateUserAppearance(clientView.AgentId, avatAppearance);
-                    avatar.Appearance = avatAppearance;
-                }
-                else
-                {
-                    m_log.WarnFormat(
-                        "[APPEARANCE]: Inventory has not yet been received for {0}, cannot set wearables", 
-                        clientView.Name);
+                    avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID;
                 }
             }
-            else
-            {
-                m_log.WarnFormat("[APPEARANCE]: Cannot set wearables for {0}, no user profile found", clientView.Name);
-            }
+            
+            SetAppearanceAssets(avatar.UUID, ref avatAppearance);
+
+            m_scene.CommsManager.AvatarService.UpdateUserAppearance(clientView.AgentId, avatAppearance);
+            avatar.Appearance = avatAppearance;
         }
 
         public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams)
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 6db9cbf..8f99395 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -35,6 +35,7 @@ using OpenSim.Framework;
 using OpenSim.Framework.Communications.Cache;
 using OpenSim.Region.Framework.Interfaces;
 using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
 
 // Temporary fix of wrong GroupPowers constants in OpenMetaverse library
 enum GroupPowers : long
@@ -964,19 +965,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
 
             if (objectID == UUID.Zero) // User inventory
             {
-                CachedUserInfo userInfo =
-                        scene.CommsManager.UserProfileCacheService.GetUserDetails(user);
-            
-                if (userInfo == null)
-                {
-                    m_log.ErrorFormat("[PERMISSIONS]: Could not find user {0} for edit notecard check", user);
-                    return false;
-                }                                
-
-                if (userInfo.RootFolder == null)
-                    return false;
-
-                InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(notecard);
+                IInventoryService invService = m_scene.InventoryService;
+                InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(notecard));
                 if (assetRequestItem == null) // Library item
                 {
                     assetRequestItem = scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard);
@@ -1394,19 +1384,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
 
             if (objectID == UUID.Zero) // User inventory
             {
-                CachedUserInfo userInfo =
-                        scene.CommsManager.UserProfileCacheService.GetUserDetails(user);
-            
-                if (userInfo == null)
-                {
-                    m_log.ErrorFormat("[PERMISSIONS]: Could not find user {0} for administrator check", user);
-                    return false;
-                }                  
-
-                if (userInfo.RootFolder == null)
-                    return false;
-
-                InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(script);
+                IInventoryService invService = m_scene.InventoryService;
+                InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(script));
                 if (assetRequestItem == null) // Library item
                 {
                     assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(script);
@@ -1499,19 +1478,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions
 
             if (objectID == UUID.Zero) // User inventory
             {
-                CachedUserInfo userInfo =
-                        scene.CommsManager.UserProfileCacheService.GetUserDetails(user);
-            
-                if (userInfo == null)
-                {
-                    m_log.ErrorFormat("[PERMISSIONS]: Could not find user {0} for view notecard check", user);
-                    return false;
-                }    
-
-                if (userInfo.RootFolder == null)
-                    return false;
-
-                InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(notecard);
+                IInventoryService invService = m_scene.InventoryService;
+                InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(notecard));
                 if (assetRequestItem == null) // Library item
                 {
                     assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard);
diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs
index 4224198..5d65f98 100644
--- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs
+++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs
@@ -201,31 +201,31 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid
             }
         }
 
-        public InventoryItemBase Get(InventoryItemBase item, UUID rootFolder, CachedUserInfo userInfo)
-        {
-            InventoryClient invCli = null;
-            string inventoryURL = UserInventoryURL(item.Owner);
-            if (!m_inventoryServers.TryGetValue(inventoryURL, out invCli))
-            {
-                m_log.Debug("[HGScene]: Starting new InventorytClient for " + inventoryURL);
-                invCli = new InventoryClient(inventoryURL);
-                m_inventoryServers.Add(inventoryURL, invCli);
-            }
-
-            item = invCli.GetInventoryItem(item);
-            if (item != null)
-            {
-                // Change the folder, stick it in root folder, all items flattened out here in this region cache
-                item.Folder = rootFolder;
-                //userInfo.AddItem(item); don't use this, it calls back to the inventory server
-                lock (userInfo.RootFolder.Items)
-                {
-                    userInfo.RootFolder.Items[item.ID] = item;
-                }
-
-            }
-            return item;
-        }
+        //public InventoryItemBase Get(InventoryItemBase item, UUID rootFolder, CachedUserInfo userInfo)
+        //{
+        //    InventoryClient invCli = null;
+        //    string inventoryURL = UserInventoryURL(item.Owner);
+        //    if (!m_inventoryServers.TryGetValue(inventoryURL, out invCli))
+        //    {
+        //        m_log.Debug("[HGScene]: Starting new InventorytClient for " + inventoryURL);
+        //        invCli = new InventoryClient(inventoryURL);
+        //        m_inventoryServers.Add(inventoryURL, invCli);
+        //    }
+
+        //    item = invCli.GetInventoryItem(item);
+        //    if (item != null)
+        //    {
+        //        // Change the folder, stick it in root folder, all items flattened out here in this region cache
+        //        item.Folder = rootFolder;
+        //        //userInfo.AddItem(item); don't use this, it calls back to the inventory server
+        //        lock (userInfo.RootFolder.Items)
+        //        {
+        //            userInfo.RootFolder.Items[item.ID] = item;
+        //        }
+
+        //    }
+        //    return item;
+        //}
 
         public void Post(UUID assetID, UUID ownerID)
         {
diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs
index cb6794e..1b93f46 100644
--- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs
@@ -117,25 +117,20 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid
 
             if (fromTaskID.Equals(UUID.Zero))
             {
-                CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
-                if (userInfo != null)
+                InventoryItemBase item = new InventoryItemBase(itemID);
+                item.Owner = remoteClient.AgentId;
+                item = InventoryService.QueryItem(item);
+                //if (item == null)
+                //{ // Fetch the item
+                //    item = new InventoryItemBase();
+                //    item.Owner = remoteClient.AgentId;
+                //    item.ID = itemID;
+                //    item = m_assMapper.Get(item, userInfo.RootFolder.ID, userInfo);
+                //}
+                if (item != null)
                 {
-                    if (userInfo.RootFolder != null)
-                    {
-                        InventoryItemBase item = userInfo.RootFolder.FindItem(itemID);
-                        if (item == null)
-                        { // Fetch the item
-                            item = new InventoryItemBase();
-                            item.Owner = remoteClient.AgentId;
-                            item.ID = itemID;
-                            item = m_assMapper.Get(item, userInfo.RootFolder.ID, userInfo);
-                        }
-                        if (item != null)
-                        {
-                            m_assMapper.Get(item.AssetID, remoteClient.AgentId);
-
-                        }
-                    }
+                    m_assMapper.Get(item.AssetID, remoteClient.AgentId);
+
                 }
             }
 
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
index 80f71b3..cd91e8c 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs
@@ -558,24 +558,9 @@ namespace OpenSim.Region.Framework.Scenes
 
             if (item == null)
             {
-                CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID);
-                if (userInfo == null)
-                {
-                    m_log.Error("[AGENT INVENTORY]: Failed to find user " + oldAgentID.ToString());
-                    return;
-                }
-
-                if (userInfo.RootFolder != null)
-                {
-                    item = userInfo.RootFolder.FindItem(oldItemID);
+                item = InventoryService.QueryItem(new InventoryItemBase(oldItemID));
 
-                    if (item == null)
-                    {
-                        m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString());
-                        return;
-                    }
-                }
-                else
+                if (item == null)
                 {
                     m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString());
                     return;
@@ -822,28 +807,15 @@ namespace OpenSim.Region.Framework.Scenes
         /// <param name="folderID"></param>
         private void RemoveInventoryFolder(IClientAPI remoteClient, UUID folderID)
         {
-            CachedUserInfo userInfo
-                = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
-
-            if (userInfo == null)
-            {
-                m_log.Warn("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString());
-                return;
-            }
+            // Unclear is this handler is ever called by the Linden client, but it might
 
-            if (userInfo.RootFolder != null)
+            InventoryFolderBase folder = new InventoryFolderBase(folderID);
+            folder.Owner = remoteClient.AgentId;
+            InventoryFolderBase trash = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder);
+            if (trash != null)
             {
-                InventoryItemBase folder = userInfo.RootFolder.FindItem(folderID);
-
-                if (folder != null)
-                {
-                    m_log.WarnFormat(
-                         "[AGENT INVENTORY]: Remove folder not implemented in request by {0} {1} for {2}",
-                         remoteClient.Name, remoteClient.AgentId, folderID);
-
-                    // doesn't work just yet, commented out. will fix in next patch.
-                    // userInfo.DeleteItem(folder);
-                }
+                folder.ParentID = trash.ID;
+                InventoryService.MoveFolder(folder);
             }
         }
 
@@ -1060,20 +1032,7 @@ namespace OpenSim.Region.Framework.Scenes
                 return MoveTaskInventoryItem(avatar.ControllingClient, folderId, part, itemId);
             }
             else
-            {
-                CachedUserInfo profile = CommsManager.UserProfileCacheService.GetUserDetails(avatarId);
-                if (profile == null || profile.RootFolder == null)
-                {
-                    m_log.ErrorFormat(
-                        "[PRIM INVENTORY]: " +
-                        "Avatar {0} cannot be found to add item",
-                        avatarId);
-                    return null;
-                }
-                
-                if (!profile.HasReceivedInventory)
-                    profile.FetchInventory();
-                
+            {             
                 InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId);
 
                 if (agentItem == null)
@@ -1265,39 +1224,33 @@ namespace OpenSim.Region.Framework.Scenes
                     UUID copyID = UUID.Random();
                     if (itemID != UUID.Zero)
                     {
-                        CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
+                        InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID));
 
-                        if (userInfo != null && userInfo.RootFolder != null)
+                        // Try library
+                        if (null == item)
                         {
-                            InventoryItemBase item = userInfo.RootFolder.FindItem(itemID);
-
-                            // Try library
-                            // XXX clumsy, possibly should be one call
-                            if (null == item)
-                            {
-                                item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID);
-                            }
+                            item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID);
+                        }
 
-                            if (item != null)
-                            {
-                                part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID);
-                                m_log.InfoFormat(
-                                    "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
-                                    item.Name, primLocalID, remoteClient.Name);
-                                part.GetProperties(remoteClient);
-                                if (!Permissions.BypassPermissions())
-                                {
-                                    if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
-                                        RemoveInventoryItem(remoteClient, itemID);
-                                }
-                            }
-                            else
+                        if (item != null)
+                        {
+                            part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID);
+                            m_log.InfoFormat(
+                                "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}",
+                                item.Name, primLocalID, remoteClient.Name);
+                            part.GetProperties(remoteClient);
+                            if (!Permissions.BypassPermissions())
                             {
-                                m_log.ErrorFormat(
-                                    "[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!",
-                                    itemID, remoteClient.Name);
+                                if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0)
+                                    RemoveInventoryItem(remoteClient, itemID);
                             }
                         }
+                        else
+                        {
+                            m_log.ErrorFormat(
+                                "[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!",
+                                itemID, remoteClient.Name);
+                        }
                     }
                 }
                 else // Updating existing item with new perms etc
@@ -1334,53 +1287,48 @@ namespace OpenSim.Region.Framework.Scenes
 
             if (itemID != UUID.Zero)  // transferred from an avatar inventory to the prim's inventory
             {
-                CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
+                InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID));
 
-                if (userInfo != null && userInfo.RootFolder != null)
+                // Try library
+                // XXX clumsy, possibly should be one call
+                if (null == item)
                 {
-                    InventoryItemBase item = userInfo.RootFolder.FindItem(itemID);
-
-                    // Try library
-                    // XXX clumsy, possibly should be one call
-                    if (null == item)
-                    {
-                        item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID);
-                    }
+                    item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID);
+                }
 
-                    if (item != null)
+                if (item != null)
+                {
+                    SceneObjectPart part = GetSceneObjectPart(localID);
+                    if (part != null)
                     {
-                        SceneObjectPart part = GetSceneObjectPart(localID);
-                        if (part != null)
-                        {
-                            if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
-                                return;
+                        if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId))
+                            return;
 
-                            part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
-                            // TODO: switch to posting on_rez here when scripts
-                            // have state in inventory
-                            part.Inventory.CreateScriptInstance(copyID, 0, false, DefaultScriptEngine, 0);
+                        part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID);
+                        // TODO: switch to posting on_rez here when scripts
+                        // have state in inventory
+                        part.Inventory.CreateScriptInstance(copyID, 0, false, DefaultScriptEngine, 0);
 
-                            //                        m_log.InfoFormat("[PRIMINVENTORY]: " +
-                            //                                         "Rezzed script {0} into prim local ID {1} for user {2}",
-                            //                                         item.inventoryName, localID, remoteClient.Name);
-                            part.GetProperties(remoteClient);
-                        }
-                        else
-                        {
-                            m_log.ErrorFormat(
-                                "[PRIM INVENTORY]: " +
-                                "Could not rez script {0} into prim local ID {1} for user {2}"
-                                + " because the prim could not be found in the region!",
-                                item.Name, localID, remoteClient.Name);
-                        }
+                        //                        m_log.InfoFormat("[PRIMINVENTORY]: " +
+                        //                                         "Rezzed script {0} into prim local ID {1} for user {2}",
+                        //                                         item.inventoryName, localID, remoteClient.Name);
+                        part.GetProperties(remoteClient);
                     }
                     else
                     {
                         m_log.ErrorFormat(
-                            "[PRIM INVENTORY]: Could not find script inventory item {0} to rez for {1}!",
-                            itemID, remoteClient.Name);
+                            "[PRIM INVENTORY]: " +
+                            "Could not rez script {0} into prim local ID {1} for user {2}"
+                            + " because the prim could not be found in the region!",
+                            item.Name, localID, remoteClient.Name);
                     }
                 }
+                else
+                {
+                    m_log.ErrorFormat(
+                        "[PRIM INVENTORY]: Could not find script inventory item {0} to rez for {1}!",
+                        itemID, remoteClient.Name);
+                }
             }
             else  // script has been rezzed directly into a prim's inventory
             {
@@ -1670,26 +1618,6 @@ namespace OpenSim.Region.Framework.Scenes
             }
         }
 
-        private bool WaitForInventory(CachedUserInfo info)
-        {
-            // 200 Seconds wait. This is called in the context of the
-            // background delete thread, so we can afford to waste time
-            // here.
-            //
-            int count = 200;
-
-            while (count > 0)
-            {
-                System.Threading.Thread.Sleep(100);
-                count--;
-                if (info.HasReceivedInventory)
-                    return true;
-            }
-            m_log.DebugFormat("Timed out waiting for inventory of user {0}",
-                    info.UserProfile.ID.ToString());
-            return false;
-        }
-
         /// <summary>
         /// Delete a scene object from a scene and place in the given avatar's inventory.
         /// Returns the UUID of the newly created asset.
diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
index ba858ed..e2debe5 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs
@@ -382,31 +382,13 @@ namespace OpenSim.Region.Framework.Scenes
                 return;
             }
             
-            CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
-
-            if (null == userProfile)
+            InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID));
+            
+            if (item != null)
             {
-                m_log.ErrorFormat(
-                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
-                    remoteClient.Name, remoteClient.AgentId);     
-                return;
-            }
-
-            if (userProfile.HasReceivedInventory)
-            {
-                InventoryItemBase item = null;
-                if (userProfile.RootFolder == null)
-                    m_log.ErrorFormat(
-                        "[AGENT INVENTORY]: User {0} {1} does not have a root folder.",
-                        remoteClient.Name, remoteClient.AgentId);
-                else
-                    item = userProfile.RootFolder.FindItem(itemID);
-                
-                if (item != null)
-                {
-                    remoteClient.SendInventoryItemDetails(ownerID, item);
-                }
+                remoteClient.SendInventoryItemDetails(ownerID, item);
             }
+            // else shouldn't we send an alert message?
         }    
         
         /// <summary>
@@ -442,6 +424,7 @@ namespace OpenSim.Region.Framework.Scenes
         /// Handle the caps inventory descendents fetch.
         ///
         /// Since the folder structure is sent to the client on login, I believe we only need to handle items.
+        /// Diva comment 8/13/2009: what if someone gave us a folder in the meantime??
         /// </summary>
         /// <param name="agentID"></param>
         /// <param name="folderID"></param>
@@ -467,59 +450,10 @@ namespace OpenSim.Region.Framework.Scenes
             {
                 return fold.RequestListOfItems();
             }
-            
-            CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(agentID);
-            
-            if (null == userProfile)
-            {
-                m_log.ErrorFormat("[AGENT INVENTORY]: Could not find user profile for {0}", agentID);                
-                return null;
-            }
-
-            // XXX: When a client crosses into a scene, their entire inventory is fetched
-            // asynchronously.  If the client makes a request before the inventory is received, we need
-            // to give the inventory a chance to come in.
-            //
-            // This is a crude way of dealing with that by retrying the lookup.  It's not quite as bad
-            // in CAPS as doing this with the udp request, since here it won't hold up other packets.
-            // In fact, here we'll be generous and try for longer.
-            if (!userProfile.HasReceivedInventory)
-            {
-                int attempts = 0;
-                while (attempts++ < 30)
-                {
-                    m_log.DebugFormat(
-                         "[INVENTORY CACHE]: Poll number {0} for inventory items in folder {1} for user {2}",
-                         attempts, folderID, agentID);
 
-                    Thread.Sleep(2000);
-
-                    if (userProfile.HasReceivedInventory)
-                    {
-                        break;
-                    }
-                }
-            }
+            InventoryCollection contents = InventoryService.GetFolderContent(agentID, folderID);
+            return contents.Items;
 
-            if (userProfile.HasReceivedInventory)
-            {
-                if ((fold = userProfile.RootFolder.FindFolder(folderID)) != null)
-                {
-                    return fold.RequestListOfItems();
-                }
-                else
-                {
-                    m_log.WarnFormat(
-                        "[AGENT INVENTORY]: Could not find folder {0} requested by user {1}",
-                        folderID, agentID);
-                    return null;
-                }
-            }
-            else
-            {
-                m_log.ErrorFormat("[INVENTORY CACHE]: Could not find root folder for user {0}", agentID);
-                return null;
-            }
         }        
         
         /// <summary>
@@ -579,34 +513,8 @@ namespace OpenSim.Region.Framework.Scenes
             }
         }        
         
-        /// <summary>
-        /// Handle an inventory folder move request from the client.
-        /// </summary>
-        /// <param name="remoteClient"></param>
-        /// <param name="folderID"></param>
-        /// <param name="parentID"></param>
         public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID)
         {
-            CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
-            
-            if (null == userProfile)
-            {
-                m_log.ErrorFormat(
-                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
-                    remoteClient.Name, remoteClient.AgentId);
-                return;
-            }
-
-            if (!userProfile.MoveFolder(folderID, parentID))
-            {
-                m_log.ErrorFormat(
-                     "[AGENT INVENTORY]: Failed to move folder {0} to {1} for user {2}",
-                     folderID, parentID, remoteClient.Name);
-            }
-        }
-
-        public void HandleMoveInventoryFolder2(IClientAPI remoteClient, UUID folderID, UUID parentID)
-        {
             InventoryFolderBase folder = new InventoryFolderBase(folderID);
             folder = InventoryService.QueryFolder(folder);
             if (folder != null)
@@ -628,27 +536,8 @@ namespace OpenSim.Region.Framework.Scenes
         /// </summary>
         /// <param name="remoteClient"></param>
         /// <param name="folderID"></param>
-        public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID)
-        {
-            CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
-            
-            if (null == userProfile)
-            {
-                m_log.ErrorFormat(
-                    "[AGENT INVENTORY]: Could not find user profile for {0} {1}",
-                    remoteClient.Name, remoteClient.AgentId);     
-                return;
-            }
 
-            if (!userProfile.PurgeFolder(folderID))
-            {
-                m_log.ErrorFormat(
-                     "[AGENT INVENTORY]: Failed to purge folder for user {0} {1}",
-                     remoteClient.Name, remoteClient.AgentId);
-            }
-        }
-
-        public void HandlePurgeInventoryDescendents2(IClientAPI remoteClient, UUID folderID)
+        public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID)
         {
             InventoryFolderBase folder = new InventoryFolderBase(folderID);
 
diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
index 0140faa..af2753c 100644
--- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs
@@ -1249,11 +1249,11 @@ namespace OpenSim.Region.Framework.Scenes
             }
             else // Not successful
             {
-                CachedUserInfo userInfo = m_commsProvider.UserProfileCacheService.GetUserDetails(agent.UUID);
-                if (userInfo != null)
-                {
-                    userInfo.FetchInventory();
-                }
+                //CachedUserInfo userInfo = m_commsProvider.UserProfileCacheService.GetUserDetails(agent.UUID);
+                //if (userInfo != null)
+                //{
+                //    userInfo.FetchInventory();
+                //}
                 agent.RestoreInCurrentScene();
             }
             // In any case
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
index 4695df7..fc8b62e 100644
--- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs
+++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs
@@ -833,11 +833,11 @@ namespace OpenSim.Region.Framework.Scenes
 
             m_scene.SwapRootAgentCount(false);
             
-            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);
+            //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);
             
             // On the next prim update, all objects will be sent
             //
-- 
cgit v1.1