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; } } private LLUUID _FolderID; public LLUUID FolderID { get { return _FolderID; } } internal LLUUID _ParentID; public LLUUID ParentID { get { return _ParentID; } } internal sbyte _Type; public sbyte Type { get { return _Type; } } internal List _Contents = new List(); #region Constructors 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; } #endregion /// /// 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. /// Indicate if item data should be downloaded too (true), or only folders(false) /// Indicate if item data should be downloaded too (true), or only folders(false) /// The Request object for this download public DownloadRequest_Folder RequestDownloadContents(bool recurse, bool folders, bool items, bool clear) { if (clear) { iManager.FolderClearContents(this, folders, items); } DownloadRequest_Folder dr = new DownloadRequest_Folder(FolderID, recurse, true, items); iManager.RequestFolder(dr); return dr; } /// /// Request a download of this folder's content information. Block until done, or timeout is reached /// /// Indicate if we should recursively download content information. /// Indicate if sub-folder data should be downloaded (true) /// Indicate if item data should be downloaded too (true) /// Delete locale cache information for the this folder and it's children, before downloading /// Milliseconds to wait before timing out, or -1 to wait indefinately. /// The Request object for this download public DownloadRequest_Folder RequestDownloadContents(bool recurse, bool folders, bool items, bool clear, int timeout) { if (clear) { iManager.FolderClearContents(this, folders, items); } DownloadRequest_Folder dr = new DownloadRequest_Folder(FolderID, recurse, true, items); iManager.RequestFolder(dr); dr.RequestComplete.WaitOne(timeout, false); return dr; } public InventoryFolder CreateFolder(string name) { return 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) { iManager.FolderMove(this, newParentID); } public InventoryNotecard NewNotecard(string name, string description, string body) { return iManager.NewNotecard(name, description, body, this.FolderID); } public InventoryImage NewImage(string name, string description, byte[] j2cdata) { return 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 = "