/// <summary>
        /// Builds a graph from the skeleton
        /// </summary>
        /// <param name="skel"></param>
        public SkeletonGraphNode(IEnumerable<InventorySkeletonEntry> skel)
        {
            Dictionary<Guid, List<InventorySkeletonEntry>> nodesByParent = new Dictionary<Guid, List<InventorySkeletonEntry>>();

            foreach (var node in skel)
            {
                if (node.Level == FolderLevel.Root)
                {
                    this.RootNode = true;
                    this.Self = node;
                    this.Parent = null;
                }

                List<InventorySkeletonEntry> childList;
                if (! nodesByParent.TryGetValue(node.ParentId, out childList))
                {
                    childList = new List<InventorySkeletonEntry>();
                    nodesByParent[node.ParentId] = childList;
                }

                childList.Add(node);
            }

            this.AllChildren = new Dictionary<Guid, SkeletonGraphNode>();

            //start at the root and work down
            this.RecursiveBuild(nodesByParent, this.AllChildren);
        }
        public void PurgeFolderContents(InventoryFolder folder)
        {
            //build a graph from the inventory skeleton
            var skel  = this.GetInventorySkeleton(folder.OwnerId);
            var graph = new SkeletonGraphNode(skel);

            var thisNode = graph.AllChildren[folder.FolderId];

            //to purge the contents of a folder, we need to collect all
            //the items and subfolders currently inside of it and delete everything
            //recursively

            Tuple <List <InventoryItem>, List <Guid> > itemsAndFolders = new Tuple <List <InventoryItem>, List <Guid> >(new List <InventoryItem>(), new List <Guid>());

            RecursiveCollectFolderContents(thisNode, itemsAndFolders);

            //remove all the items
            foreach (var item in itemsAndFolders.Item1)
            {
                this.PurgeItem(item);
            }

            //remove the folders
            foreach (var folderid in itemsAndFolders.Item2)
            {
                if (folderid != folder.FolderId)
                {
                    this.DeleteFolder(folder.OwnerId, folderid);
                }
            }

            VersionInc(folder.OwnerId, folder.FolderId);
        }
Esempio n. 3
0
        /// <summary>
        /// Builds a graph from the skeleton
        /// </summary>
        /// <param name="skel"></param>
        public SkeletonGraphNode(IEnumerable <InventorySkeletonEntry> skel)
        {
            Dictionary <Guid, List <InventorySkeletonEntry> > nodesByParent = new Dictionary <Guid, List <InventorySkeletonEntry> >();

            foreach (var node in skel)
            {
                if (node.Level == FolderLevel.Root)
                {
                    this.RootNode = true;
                    this.Self     = node;
                    this.Parent   = null;
                }

                List <InventorySkeletonEntry> childList;
                if (!nodesByParent.TryGetValue(node.ParentId, out childList))
                {
                    childList = new List <InventorySkeletonEntry>();
                    nodesByParent[node.ParentId] = childList;
                }

                childList.Add(node);
            }

            this.AllChildren = new Dictionary <Guid, SkeletonGraphNode>();

            //start at the root and work down
            this.RecursiveBuild(nodesByParent, this.AllChildren);
        }
        private void RecursiveCollectFolderContents(SkeletonGraphNode node, Tuple <List <InventoryItem>, List <Guid> > itemsAndFolders)
        {
            //add folder id
            itemsAndFolders.Item2.Add(node.Self.FolderId);

            //add items
            var folder = this.GetFolder(node.Self.FolderId);

            itemsAndFolders.Item1.AddRange(folder.Items);

            //subfolders
            foreach (var subfolder in node.DirectChildren)
            {
                this.RecursiveCollectFolderContents(subfolder, itemsAndFolders);
            }
        }
        private void RecursiveBuild(Dictionary<Guid, List<InventorySkeletonEntry>> nodesByParent, Dictionary<Guid, SkeletonGraphNode> allChildren)
        {
            allChildren.Add(this.Self.FolderId, this);

            //find my direct children
            this.DirectChildren = new List<SkeletonGraphNode>();

            List<InventorySkeletonEntry> children;
            if (nodesByParent.TryGetValue(this.Self.FolderId, out children))
            {
                foreach (var child in children)
                {
                    var newChild = new SkeletonGraphNode { Self = child, Parent = this, RootNode = false };
                    this.DirectChildren.Add(newChild);
                    newChild.RecursiveBuild(nodesByParent, allChildren);
                }
            }
        }
Esempio n. 6
0
        private void RecursiveBuild(Dictionary <Guid, List <InventorySkeletonEntry> > nodesByParent, Dictionary <Guid, SkeletonGraphNode> allChildren)
        {
            allChildren.Add(this.Self.FolderId, this);

            //find my direct children
            this.DirectChildren = new List <SkeletonGraphNode>();

            List <InventorySkeletonEntry> children;

            if (nodesByParent.TryGetValue(this.Self.FolderId, out children))
            {
                foreach (var child in children)
                {
                    var newChild = new SkeletonGraphNode {
                        Self = child, Parent = this, RootNode = false
                    };
                    this.DirectChildren.Add(newChild);
                    newChild.RecursiveBuild(nodesByParent, allChildren);
                }
            }
        }
        private void RecursiveCollectFolderContents(SkeletonGraphNode node, Tuple<List<InventoryItem>, List<Guid>> itemsAndFolders)
        {
            //add folder id
            itemsAndFolders.Item2.Add(node.Self.FolderId);

            //add items
            var folder = this.GetFolder(node.Self.FolderId);
            itemsAndFolders.Item1.AddRange(folder.Items);

            //subfolders
            foreach (var subfolder in node.DirectChildren)
            {
                this.RecursiveCollectFolderContents(subfolder, itemsAndFolders);
            }
        }
        public void PurgeFolderContents(InventoryFolder folder)
        {
            //build a graph from the inventory skeleton
            var skel = this.GetInventorySkeleton(folder.OwnerId);
            var graph = new SkeletonGraphNode(skel);

            var thisNode = graph.AllChildren[folder.FolderId];

            //to purge the contents of a folder, we need to collect all
            //the items and subfolders currently inside of it and delete everything
            //recursively

            Tuple<List<InventoryItem>, List<Guid>> itemsAndFolders = new Tuple<List<InventoryItem>, List<Guid>>(new List<InventoryItem>(), new List<Guid>());
            RecursiveCollectFolderContents(thisNode, itemsAndFolders);

            //remove all the items
            foreach (var item in itemsAndFolders.Item1)
            {
                this.PurgeItem(item);
            }

            //remove the folders
            foreach (var folderid in itemsAndFolders.Item2)
            {
                if (folderid != folder.FolderId)
                {
                    this.DeleteFolder(folder.OwnerId, folderid);
                }
            }

            VersionInc(folder.OwnerId, folder.FolderId);
        }