OpenSim.Region.Framework.Scenes.Scene.SendInventoryUpdate C# (CSharp) Method

SendInventoryUpdate() private method

private SendInventoryUpdate ( IClientAPI client, InventoryFolderBase folder, bool fetchFolders, bool fetchItems ) : void
client IClientAPI
folder InventoryFolderBase
fetchFolders bool
fetchItems bool
return void
        private void SendInventoryUpdate(IClientAPI client, InventoryFolderBase folder, bool fetchFolders, bool fetchItems)
        {
            if (folder == null)
                return;

            // TODO: This code for looking in the folder for the library should be folded somewhere else
            // so that this class doesn't have to know the details (and so that multiple libraries, etc.
            // can be handled transparently).
            InventoryFolderImpl fold = null;
            if (LibraryService != null && LibraryService.LibraryRootFolder != null)
            {
                if ((fold = LibraryService.LibraryRootFolder.FindFolder(folder.ID)) != null)
                {
                    client.SendInventoryFolderDetails(
                        fold.Owner, folder.ID, fold.RequestListOfItems(),
                        fold.RequestListOfFolders(), fold.Version, fetchFolders, fetchItems);
                    return;
                }
            }

            // Fetch the folder contents
            InventoryCollection contents = InventoryService.GetFolderContent(client.AgentId, folder.ID);

            // Fetch the folder itself to get its current version
            InventoryFolderBase containingFolder = new InventoryFolderBase(folder.ID, client.AgentId);
            containingFolder = InventoryService.GetFolder(containingFolder);

            //m_log.DebugFormat("[AGENT INVENTORY]: Sending inventory folder contents ({0} nodes) for \"{1}\" to {2} {3}",
            //    contents.Folders.Count + contents.Items.Count, containingFolder.Name, client.FirstName, client.LastName);

            if (containingFolder != null && containingFolder != null)
                client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, containingFolder.Version, fetchFolders, fetchItems);
        }

Usage Example

        public UUID MoveInventory(Scene scene,UUID destID, string category, SceneObjectPart host, List<UUID> items)
        {
            InventoryFolderBase StoreFolder = new InventoryFolderBase();
            List<InventoryFolderBase> m_invbase = new List<InventoryFolderBase> ();
            m_invbase = inventoryService.GetInventorySkeleton (destID);
            foreach (InventoryFolderBase current in m_invbase) {
                if (current.Name.ToString () == "Web Store Items") {
                    StoreFolder = current;
                }
            }

            UUID newFolderID = UUID.Random();

            InventoryFolderBase newFolder = new InventoryFolderBase(newFolderID, category, destID, -1, StoreFolder.ID, StoreFolder.Version);
            inventoryService.AddFolder(newFolder);

            foreach (UUID itemID in items)
            {
                InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(scene,destID, host, itemID);

                if (agentItem != null)
                {
                    agentItem.Folder = newFolderID;

                    scene.AddInventoryItem(agentItem);
                }
            }

            ScenePresence avatar = null;
            if (scene.TryGetScenePresence(destID, out avatar))
            {
                scene.SendInventoryUpdate(avatar.ControllingClient, StoreFolder, true, false);
                scene.SendInventoryUpdate(avatar.ControllingClient, newFolder, false, true);
            }

            return newFolderID;
        }
Scene