Esempio n. 1
0
        protected void SetupTree(InventoryTree tree, ITreeModel model, bool expandRoot)
        {
            tree.NodeControls.Clear();
            NodeCheckBox checkBox = tree.AddCheckBoxControl("Checked");

            checkBox.IsVisibleValueNeeded     += new EventHandler <NodeControlValueEventArgs>(IsCheckBoxVisible);
            checkBox.IsEditEnabledValueNeeded += new EventHandler <NodeControlValueEventArgs>(IsCheckBoxEnabled);
            checkBox.CheckStateChanged        += new EventHandler <TreePathEventArgs>(CheckBoxStateChanged);
            tree.AddIconControl("Icon");
            tree.AddTextBoxControl("Name");
            tree.SetModel(model, expandRoot);
        }
Esempio n. 2
0
 protected void SetupTreeEvents(InventoryTree tree)
 {
     tree.NodeMouseDoubleClick  += new EventHandler <TreeNodeAdvMouseEventArgs>(this._treeView_NodeMouseDoubleClick);
     tree.SelectionChangedEvent += new EventHandler <ObjectEventArgs>(this._treeView_SelectionChangedEvent);
 }
        protected InventoryTree CopyFolder(UUID principalID, UUID folderID, UUID toNewFolder)
        {
            int folderIdx  = 0;
            var folderList = new List <InventoryTree>();
            var itemList   = new List <InventoryItem>();
            var treeDict   = new Dictionary <UUID, InventoryTree>();

            var copyFolder = new InventoryTree(Folder[principalID, folderID]);

            folderList.Add(copyFolder);
            treeDict[copyFolder.ID] = copyFolder;

            var mapparents = new Dictionary <UUID, UUID>
            {
                [copyFolder.ParentFolderID] = toNewFolder,
                [copyFolder.ID]             = UUID.Random
            };

            if (!IsParentFolderIdValid(principalID, toNewFolder))
            {
                throw new InvalidParentFolderIdException();
            }
            while (folderIdx < folderList.Count)
            {
                List <InventoryFolder> folders;
                UUID thisFolderID = folderList[folderIdx].ID;
                try
                {
                    folders = Folder.GetFolders(principalID, thisFolderID);
                }
                catch
                {
                    continue;
                }
                foreach (InventoryFolder folder in folders)
                {
                    var childFolder = new InventoryTree(folder);
                    treeDict[thisFolderID].Folders.Add(childFolder);
                    treeDict[folder.ID] = childFolder;
                }
                ++folderIdx;
            }

            for (folderIdx = 0; folderIdx < folderList.Count; ++folderIdx)
            {
                List <InventoryItem> items;
                InventoryTree        parentFolder = folderList[folderIdx];
                try
                {
                    items = Folder.GetItems(principalID, parentFolder.ID);
                }
                catch
                {
                    continue;
                }
                foreach (InventoryItem item in items)
                {
                    if (!item.CheckPermissions(item.Owner, UGI.Unknown, InventoryPermissionsMask.Copy))
                    {
                        throw new InventoryItemNotCopiableException(item.ID);
                    }
                    item.ParentFolderID = mapparents[item.ParentFolderID];
                    parentFolder.Items.Add(item);
                }
            }

            foreach (InventoryTree folder in folderList)
            {
                folder.ParentFolderID = mapparents[folder.ParentFolderID];
                UUID prevFolderID = UUID.Random;
                folder.ID = prevFolderID;
                Folder.Add(folder);
                mapparents[prevFolderID] = folder.ID;
            }

            foreach (InventoryItem item in itemList)
            {
                Item.Add(item);
            }

            return(copyFolder);
        }
        InventoryTree IInventoryFolderServiceInterface.Copy(UUID principalID, UUID folderID, UUID toFolderID)
        {
            var headers = new Dictionary <string, string>
            {
                ["Destination"] = $"{m_CapabilityUri}category/{toFolderID}"
            };
            Map            res;
            HttpStatusCode statuscode;

            using (Stream s = new HttpClient.Copy($"{m_CapabilityUri}category/{folderID}")
            {
                TimeoutMs = TimeoutMs,
                Headers = headers,
                DisableExceptions = HttpClient.Request.DisableExceptionFlags.DisableForbidden |
                                    HttpClient.Request.DisableExceptionFlags.DisableGone
            }.ExecuteStreamRequest(out statuscode))
            {
                switch (statuscode)
                {
                case HttpStatusCode.OK:
                    break;

                case HttpStatusCode.Forbidden:
                    throw new InventoryItemNotCopiableException();

                case HttpStatusCode.Gone:
                    throw new InventoryFolderNotFoundException(folderID);

                default:
                    throw new InvalidParentFolderIdException();
                }
                res = (Map)LlsdXml.Deserialize(s);
            }

            var copiedFolder = new InventoryTree
            {
                Name           = res["name"].ToString(),
                DefaultType    = (AssetType)res["type_default"].AsInt,
                ParentFolderID = res["parent_id"].AsUUID,
                Version        = res["version"].AsInt,
                Owner          = new UGUI(res["agent_id"].AsUUID),
                ID             = res["category_id"].AsUUID
            };
            var stack      = new List <Map>();
            var parentTree = new Dictionary <UUID, InventoryTree>();

            parentTree.Add(copiedFolder.ID, copiedFolder);
            stack.Add(res);
            while (stack.Count > 0)
            {
                res = stack[0];
                stack.RemoveAt(0);
                Map           embmap;
                Map           foldermap;
                InventoryTree parentFolder = parentTree[res["category_id"].AsUUID];
                parentFolder.Items.AddRange(ExtractItems(res));
                if (res.TryGetValue("_embedded", out embmap) && embmap.TryGetValue("categories", out foldermap))
                {
                    foreach (KeyValuePair <string, IValue> kvp in foldermap)
                    {
                        var folderdata = kvp.Value as Map;
                        if (folderdata == null)
                        {
                            continue;
                        }
                        var folder = new InventoryTree(folderdata["category_id"].AsUUID)
                        {
                            Name           = folderdata["name"].ToString(),
                            DefaultType    = (AssetType)folderdata["type_default"].AsInt,
                            ParentFolderID = folderdata["parent_id"].AsUUID,
                            Version        = folderdata["version"].AsInt,
                            Owner          = new UGUI(folderdata["agent_id"].AsUUID)
                        };
                        stack.Add(folderdata);
                        parentFolder.Folders.Add(folder);
                    }
                }
            }
            return(copiedFolder);
        }