diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
index 091a6a3ee1..daf9ab5584 100644
--- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
+++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
@@ -57,99 +57,169 @@ namespace OpenSim.Framework.Communications.Cache
{
}
- // Methods
public InventoryFolderImpl CreateNewSubFolder(LLUUID folderID, string folderName, ushort type)
{
- if (!SubFolders.ContainsKey(folderID))
+ lock (SubFolders)
{
- InventoryFolderImpl subFold = new InventoryFolderImpl();
- subFold.Name = folderName;
- subFold.ID = folderID;
- subFold.Type = (short) type;
- subFold.ParentID = this.ID;
- subFold.Owner = Owner;
- SubFolders.Add(subFold.ID, subFold);
- return subFold;
+ if (!SubFolders.ContainsKey(folderID))
+ {
+ InventoryFolderImpl subFold = new InventoryFolderImpl();
+ subFold.Name = folderName;
+ subFold.ID = folderID;
+ subFold.Type = (short) type;
+ subFold.ParentID = this.ID;
+ subFold.Owner = Owner;
+ SubFolders.Add(subFold.ID, subFold);
+ return subFold;
+ }
}
+
return null;
}
+
+ ///
+ /// Delete all the folders and items in this folder.
+ ///
+ /// TODO: This method is not used yet, but will be shortly
+ ///
+ public void DeleteAllContents()
+ {
+ foreach (InventoryFolderImpl folder in SubFolders.Values)
+ {
+ folder.DeleteAllContents();
+ }
+
+ SubFolders.Clear();
+ Items.Clear();
+ }
+ ///
+ /// Does this folder contain the given item?
+ ///
+ ///
+ ///
public InventoryItemBase HasItem(LLUUID itemID)
{
InventoryItemBase base2 = null;
- if (Items.ContainsKey(itemID))
+
+ lock (Items)
{
- return Items[itemID];
- }
- foreach (InventoryFolderImpl folder in SubFolders.Values)
- {
- base2 = folder.HasItem(itemID);
- if (base2 != null)
+ if (Items.ContainsKey(itemID))
{
- break;
+ return Items[itemID];
}
}
- return base2;
- }
-
- public bool DeleteItem(LLUUID itemID)
- {
- bool found = false;
- if (Items.ContainsKey(itemID))
- {
- Items.Remove(itemID);
- return true;
- }
- foreach (InventoryFolderImpl folder in SubFolders.Values)
- {
- found = folder.DeleteItem(itemID);
- if (found == true)
- {
- break;
- }
- }
- return found;
- }
-
-
- public InventoryFolderImpl HasSubFolder(LLUUID folderID)
- {
- InventoryFolderImpl returnFolder = null;
- if (SubFolders.ContainsKey(folderID))
- {
- returnFolder = SubFolders[folderID];
- }
- else
+
+ lock (SubFolders)
{
foreach (InventoryFolderImpl folder in SubFolders.Values)
{
- returnFolder = folder.HasSubFolder(folderID);
- if (returnFolder != null)
+ base2 = folder.HasItem(itemID);
+ if (base2 != null)
{
break;
}
}
}
+
+ return base2;
+ }
+
+ ///
+ /// Delete an item from the folder.
+ ///
+ ///
+ ///
+ public bool DeleteItem(LLUUID itemID)
+ {
+ bool found = false;
+
+ lock (Items)
+ {
+ if (Items.ContainsKey(itemID))
+ {
+ Items.Remove(itemID);
+ return true;
+ }
+ }
+
+ lock (SubFolders)
+ {
+ foreach (InventoryFolderImpl folder in SubFolders.Values)
+ {
+ found = folder.DeleteItem(itemID);
+ if (found == true)
+ {
+ break;
+ }
+ }
+ }
+ return found;
+ }
+
+ ///
+ /// Does this folder contain the given subfolder?
+ ///
+ ///
+ public InventoryFolderImpl HasSubFolder(LLUUID folderID)
+ {
+ InventoryFolderImpl returnFolder = null;
+
+ lock (SubFolders)
+ {
+ if (SubFolders.ContainsKey(folderID))
+ {
+ returnFolder = SubFolders[folderID];
+ }
+ else
+ {
+ foreach (InventoryFolderImpl folder in SubFolders.Values)
+ {
+ returnFolder = folder.HasSubFolder(folderID);
+ if (returnFolder != null)
+ {
+ break;
+ }
+ }
+ }
+ }
+
return returnFolder;
}
+ ///
+ /// Return the list of items in this folder
+ ///
public List RequestListOfItems()
{
List itemList = new List();
- foreach (InventoryItemBase item in Items.Values)
+
+ lock (Items)
{
- itemList.Add(item);
+ foreach (InventoryItemBase item in Items.Values)
+ {
+ itemList.Add(item);
+ }
}
+
return itemList;
}
+ ///
+ /// Return the list of folders in this folder
+ ///
public List RequestListOfFolders()
- {
+ {
List folderList = new List();
- foreach (InventoryFolderBase folder in SubFolders.Values)
+
+ lock (SubFolders)
{
- folderList.Add(folder);
+ foreach (InventoryFolderBase folder in SubFolders.Values)
+ {
+ folderList.Add(folder);
+ }
}
+
return folderList;
}
}