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 = "\n";
foreach (Object oContent in _Contents)
{
output += ((InventoryBase)oContent).toXML(outputAssets);
}
output += "\n";
return output;
}
}
}