/// <summary>
        /// Read a library inventory folder from a loaded configuration
        /// </summary>
        /// <param name="source"></param>
        private void ReadFolderFromConfig(IConfig config, string path)
        {
            InventoryFolderImpl folderInfo = new InventoryFolderImpl();

            folderInfo.ID       = new UUID(config.GetString("folderID", m_LibraryRootFolder.ID.ToString()));
            folderInfo.Name     = config.GetString("name", "unknown");
            folderInfo.ParentID = new UUID(config.GetString("parentFolderID", m_LibraryRootFolder.ID.ToString()));
            folderInfo.Type     = (short)config.GetInt("type", 8);

            folderInfo.Owner   = libOwner;
            folderInfo.Version = 1;

            if (libraryFolders.ContainsKey(folderInfo.ParentID))
            {
                InventoryFolderImpl parentFolder = libraryFolders[folderInfo.ParentID];

                libraryFolders.Add(folderInfo.ID, folderInfo);
                parentFolder.AddChildFolder(folderInfo);

                //                 m_log.InfoFormat("[LIBRARY INVENTORY]: Adding folder {0} ({1})", folderInfo.name, folderInfo.folderID);
            }
            else
            {
                m_log.WarnFormat(
                    "[LIBRARY INVENTORY]: Couldn't add folder {0} ({1}) since parent folder with ID {2} does not exist!",
                    folderInfo.Name, folderInfo.ID, folderInfo.ParentID);
            }
        }
Пример #2
0
 public void AddToDefaultInventory(InventoryFolderImpl folder)
 {
     foreach (InventoryFolderImpl f in folder.RequestListOfFolderImpls())
     {
         m_LibraryRootFolder.AddChildFolder(f);
     }
     foreach (InventoryItemBase i in folder.RequestListOfItems())
     {
         m_LibraryRootFolder.Items.Add(i.ID, i);
     }
 }
Пример #3
0
        private void TraverseFolders(InventoryFolderImpl folderimp, UUID ID, IInventoryService InventoryService)
        {
            InventoryCollection col = InventoryService.GetFolderContent(LibraryOwner, ID);

            foreach (InventoryItemBase item in col.Items)
            {
                folderimp.Items.Add(item.ID, item);
            }
            foreach (InventoryFolderBase folder in col.Folders)
            {
                InventoryFolderImpl childFolder = new InventoryFolderImpl(folder);
                TraverseFolders(childFolder, folder.ID, InventoryService);
                folderimp.AddChildFolder(childFolder);
            }
        }
Пример #4
0
        /// <summary>
        /// Read a library inventory folder from a loaded configuration
        /// </summary>
        /// <param name="source"></param>
        private void ReadFolderFromConfig(IConfig config, string path)
        {
            InventoryFolderImpl folderInfo = new InventoryFolderImpl();

            folderInfo.ID       = new UUID(config.GetString("folderID", m_service.LibraryRootFolder.ID.ToString()));
            folderInfo.Name     = config.GetString("name", "unknown");
            folderInfo.ParentID = new UUID(config.GetString("parentFolderID", m_service.LibraryRootFolder.ID.ToString()));
            folderInfo.Type     = (short)config.GetInt("type", 8);

            folderInfo.Owner   = m_service.LibraryOwner;
            folderInfo.Version = 1;

            m_inventoryService.AddFolder(folderInfo);
            m_folder.AddChildFolder(folderInfo);
        }
Пример #5
0
        /// <summary>
        /// Handle an inventory folder move request from the client.
        ///
        /// If the inventory service has not yet delievered the inventory
        /// for this user then the request will be queued.
        /// </summary>
        ///
        /// <param name="folderID"></param>
        /// <param name="parentID"></param>
        /// <returns>
        /// true if the delete was successful, or if it was queued pending folder receipt
        /// false if the folder to be deleted did not exist.
        /// </returns>
        public bool MoveFolder(UUID folderID, UUID parentID)
        {
            //            m_log.DebugFormat(
            //                "[AGENT INVENTORY]: Moving inventory folder {0} into folder {1} for {2} {3}",
            //                parentID, remoteClient.Name, remoteClient.Name, remoteClient.AgentId);

            if (m_hasReceivedInventory)
            {
                InventoryFolderBase baseFolder = new InventoryFolderBase();
                baseFolder.Owner    = m_userProfile.ID;
                baseFolder.ID       = folderID;
                baseFolder.ParentID = parentID;

                m_InventoryService.MoveFolder(baseFolder);

                InventoryFolderImpl folder       = RootFolder.FindFolder(folderID);
                InventoryFolderImpl parentFolder = RootFolder.FindFolder(parentID);
                if (parentFolder != null && folder != null)
                {
                    InventoryFolderImpl oldParentFolder = RootFolder.FindFolder(folder.ParentID);

                    if (oldParentFolder != null)
                    {
                        oldParentFolder.RemoveChildFolder(folderID);
                        parentFolder.AddChildFolder(folder);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }

                return(true);
            }
            else
            {
                AddRequest(
                    new InventoryRequest(
                        Delegate.CreateDelegate(typeof(MoveFolderDelegate), this, "MoveFolder"),
                        new object[] { folderID, parentID }));

                return(true);
            }
        }
Пример #6
0
        /// <summary>
        /// Recursively, in depth-first order, add all the folders we've received (stored
        /// in a dictionary indexed by parent ID) into the tree that describes user folder
        /// heirarchy
        /// Any folder that is resolved into the tree is also added to resolvedFolderDictionary,
        /// indexed by folder ID.
        /// </summary>
        /// <param name="parentId">
        /// A <see cref="UUID"/>
        /// </param>
        private void ResolveReceivedFolders(InventoryFolderImpl parentFolder,
                                            IDictionary <UUID, IList <InventoryFolderImpl> > receivedFolderDictionary,
                                            IDictionary <UUID, InventoryFolderImpl> resolvedFolderDictionary)
        {
            if (receivedFolderDictionary.ContainsKey(parentFolder.ID))
            {
                List <InventoryFolderImpl> resolvedFolders = new List <InventoryFolderImpl>(); // Folders we've resolved with this invocation
                foreach (InventoryFolderImpl folder in receivedFolderDictionary[parentFolder.ID])
                {
                    if (parentFolder.ContainsChildFolder(folder.ID))
                    {
                        m_log.WarnFormat(
                            "[INVENTORY CACHE]: Received folder {0} {1} from inventory service which has already been received",
                            folder.Name, folder.ID);
                    }
                    else
                    {
                        if (resolvedFolderDictionary.ContainsKey(folder.ID))
                        {
                            m_log.WarnFormat(
                                "[INVENTORY CACHE]: Received folder {0} {1} from inventory service has already been received but with different parent",
                                folder.Name, folder.ID);
                        }
                        else
                        {
                            resolvedFolders.Add(folder);
                            resolvedFolderDictionary[folder.ID] = folder;
                            parentFolder.AddChildFolder(folder);
                        }
                    }
                } // foreach (folder in pendingCategorizationFolders[parentFolder.ID])

                receivedFolderDictionary.Remove(parentFolder.ID);
                foreach (InventoryFolderImpl folder in resolvedFolders)
                {
                    ResolveReceivedFolders(folder, receivedFolderDictionary, resolvedFolderDictionary);
                }
            } // if (receivedFolderDictionary.ContainsKey(parentFolder.ID))
        }
        private void TraverseFolders(InventoryFolderImpl folderimp, UUID ID, Scene m_MockScene)
        {
            InventoryCollection col = m_MockScene.InventoryService.GetFolderContent(m_service.LibraryOwner, ID);

            foreach (InventoryItemBase item in col.Items)
            {
                folderimp.Items[item.ID] = item;
            }
            foreach (InventoryFolderBase folder in col.Folders)
            {
                InventoryFolderImpl childFolder = new InventoryFolderImpl(folder);
                foreach (KeyValuePair <String, AssetType> type in m_assetTypes)
                {
                    if (childFolder.Name.ToLower().StartsWith(type.Key.ToLower()))
                    {
                        childFolder.Type = (short)type.Value;
                    }
                }
                TraverseFolders(childFolder, folder.ID, m_MockScene);
                folderimp.AddChildFolder(childFolder);
            }
        }
Пример #8
0
        /// <summary>
        /// Recursively, in depth-first order, add all the folders we've received (stored 
        /// in a dictionary indexed by parent ID) into the tree that describes user folder
        /// heirarchy
        /// Any folder that is resolved into the tree is also added to resolvedFolderDictionary,
        /// indexed by folder ID.
        /// </summary>
        /// <param name="parentId">
        /// A <see cref="UUID"/>
        /// </param>
        private void ResolveReceivedFolders(InventoryFolderImpl parentFolder, 
                                            IDictionary<UUID, IList<InventoryFolderImpl>> receivedFolderDictionary, 
                                            IDictionary<UUID, InventoryFolderImpl> resolvedFolderDictionary)
        {
            if (receivedFolderDictionary.ContainsKey(parentFolder.ID))
            {
                List<InventoryFolderImpl> resolvedFolders = new List<InventoryFolderImpl>(); // Folders we've resolved with this invocation
                foreach (InventoryFolderImpl folder in receivedFolderDictionary[parentFolder.ID])
                {
                    if (parentFolder.ContainsChildFolder(folder.ID))
                    {
                        m_log.WarnFormat(
                            "[INVENTORY CACHE]: Received folder {0} {1} from inventory service which has already been received",
                            folder.Name, folder.ID);
                    }
                    else
                    {
                        if (resolvedFolderDictionary.ContainsKey(folder.ID)) 
                        {
                            m_log.WarnFormat(
                                "[INVENTORY CACHE]: Received folder {0} {1} from inventory service has already been received but with different parent",
                                folder.Name, folder.ID);
                        }
                        else
                        {
                            resolvedFolders.Add(folder);
                            resolvedFolderDictionary[folder.ID] = folder;
                            parentFolder.AddChildFolder(folder);
                        }
                    }
                } // foreach (folder in pendingCategorizationFolders[parentFolder.ID])

                receivedFolderDictionary.Remove(parentFolder.ID);
                foreach (InventoryFolderImpl folder in resolvedFolders)
                    ResolveReceivedFolders(folder, receivedFolderDictionary, resolvedFolderDictionary);
            } // if (receivedFolderDictionary.ContainsKey(parentFolder.ID))
        }