using System.Collections.Generic; using System; using libsecondlife; namespace libsecondlife.InventorySystem { /// /// Summary description for InventoryFolder. /// public class InventoryFolder : InventoryBase { public enum FolderUpdateFlag { None, NoRecurse, Recurse }; public string Name { get { return _Name; } set { _Name = value; base.iManager.FolderRename(this); } } private LLUUID _FolderID; public LLUUID FolderID { get { return _FolderID; } } private LLUUID _ParentID; public LLUUID ParentID { get { return _ParentID; } set { InventoryFolder ifParent = iManager.getFolder(this.ParentID); ifParent._Contents.Remove(this); ifParent = iManager.getFolder(value); ifParent._Contents.Add(this); this._ParentID = value; base.iManager.FolderMove(this, value); } } internal sbyte _Type; public sbyte Type { get { return _Type; } } internal List _Contents = new List(); internal InventoryFolder(InventoryManager manager) : base(manager) { _Name = ""; _FolderID = LLUUID.Zero; _ParentID = LLUUID.Zero; _Type = -1; } internal InventoryFolder(InventoryManager manager, String name, LLUUID folderID, LLUUID parentID) : base(manager) { this._Name = name; this._FolderID = folderID; this._ParentID = parentID; this._Type = 0; } internal InventoryFolder(InventoryManager manager, String name, LLUUID folderID, LLUUID parentID, sbyte Type) : base(manager) { this._Name = name; this._FolderID = folderID; this._ParentID = parentID; this._Type = Type; } internal InventoryFolder(InventoryManager manager, Dictionary htData) : base(manager) { this._Name = htData["name"]; this._FolderID = new LLUUID(htData["folder_id"]); this._ParentID = new LLUUID(htData["parent_id"]); this._Type = sbyte.Parse(htData["type_default"].ToString()); } /// /// Get the contents of this folder /// /// Contents of this folder public List GetContents() { return _Contents; } /// /// Request a download of this folder's content information. /// /// Indicate if we should recursively download content information. /// The Request object for this download public DownloadRequest_Folder BeginDownloadContents(bool recurse) { _Contents.Clear(); DownloadRequest_Folder dr = new DownloadRequest_Folder(FolderID, recurse); iManager.RequestFolder(dr); return dr; } /// /// Request a download of this folder's content information. /// /// Indicate if we should recursively download content information. /// Indicate if item data should be downloaded too (true), or only folders(false) /// The Request object for this download public DownloadRequest_Folder BeginDownloadContents(bool recurse, bool items) { _Contents.Clear(); DownloadRequest_Folder dr = new DownloadRequest_Folder(FolderID, recurse, items); iManager.RequestFolder(dr); return dr; } public InventoryFolder CreateFolder(string name) { return base.iManager.FolderCreate(name, FolderID); } public void Delete() { iManager.getFolder(this.ParentID)._Contents.Remove(this); iManager.FolderRemove(this); } public void MoveTo(InventoryFolder newParent) { MoveTo(newParent.FolderID); } public void MoveTo(LLUUID newParentID) { this.ParentID = newParentID; } public InventoryNotecard NewNotecard(string name, string description, string body) { return base.iManager.NewNotecard(name, description, body, this.FolderID); } public InventoryImage NewImage(string name, string description, byte[] j2cdata) { return base.iManager.NewImage(name, description, j2cdata, this.FolderID); } public List GetItemByName(string name) { List items = new List(); foreach (InventoryBase ib in _Contents) { if (ib is InventoryFolder) { items.AddRange(((InventoryFolder)ib).GetItemByName(name)); } else if (ib is InventoryItem) { if (((InventoryItem)ib).Name.Equals(name)) { items.Add(ib); } } } return items; } public override string GetDisplayType() { return "Folder"; } /// /// Output this folder as XML /// /// Include an asset data as well, TRUE/FALSE override public string toXML(bool outputAssets) { string output = "