aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs148
1 files changed, 109 insertions, 39 deletions
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
index 091a6a3..daf9ab5 100644
--- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
+++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
@@ -57,99 +57,169 @@ namespace OpenSim.Framework.Communications.Cache
57 { 57 {
58 } 58 }
59 59
60 // Methods
61 public InventoryFolderImpl CreateNewSubFolder(LLUUID folderID, string folderName, ushort type) 60 public InventoryFolderImpl CreateNewSubFolder(LLUUID folderID, string folderName, ushort type)
62 { 61 {
63 if (!SubFolders.ContainsKey(folderID)) 62 lock (SubFolders)
64 { 63 {
65 InventoryFolderImpl subFold = new InventoryFolderImpl(); 64 if (!SubFolders.ContainsKey(folderID))
66 subFold.Name = folderName; 65 {
67 subFold.ID = folderID; 66 InventoryFolderImpl subFold = new InventoryFolderImpl();
68 subFold.Type = (short) type; 67 subFold.Name = folderName;
69 subFold.ParentID = this.ID; 68 subFold.ID = folderID;
70 subFold.Owner = Owner; 69 subFold.Type = (short) type;
71 SubFolders.Add(subFold.ID, subFold); 70 subFold.ParentID = this.ID;
72 return subFold; 71 subFold.Owner = Owner;
72 SubFolders.Add(subFold.ID, subFold);
73 return subFold;
74 }
73 } 75 }
76
74 return null; 77 return null;
75 } 78 }
79
80 /// <summary>
81 /// Delete all the folders and items in this folder.
82 ///
83 /// TODO: This method is not used yet, but will be shortly
84 /// </summary>
85 public void DeleteAllContents()
86 {
87 foreach (InventoryFolderImpl folder in SubFolders.Values)
88 {
89 folder.DeleteAllContents();
90 }
91
92 SubFolders.Clear();
93 Items.Clear();
94 }
76 95
96 /// <summary>
97 /// Does this folder contain the given item?
98 /// </summary>
99 /// <param name="itemID"></param>
100 /// <returns></returns>
77 public InventoryItemBase HasItem(LLUUID itemID) 101 public InventoryItemBase HasItem(LLUUID itemID)
78 { 102 {
79 InventoryItemBase base2 = null; 103 InventoryItemBase base2 = null;
80 if (Items.ContainsKey(itemID)) 104
105 lock (Items)
81 { 106 {
82 return Items[itemID]; 107 if (Items.ContainsKey(itemID))
108 {
109 return Items[itemID];
110 }
83 } 111 }
84 foreach (InventoryFolderImpl folder in SubFolders.Values) 112
113 lock (SubFolders)
85 { 114 {
86 base2 = folder.HasItem(itemID); 115 foreach (InventoryFolderImpl folder in SubFolders.Values)
87 if (base2 != null)
88 { 116 {
89 break; 117 base2 = folder.HasItem(itemID);
118 if (base2 != null)
119 {
120 break;
121 }
90 } 122 }
91 } 123 }
124
92 return base2; 125 return base2;
93 } 126 }
94 127
128 /// <summary>
129 /// Delete an item from the folder.
130 /// </summary>
131 /// <param name="folderID"></param>
132 /// <returns></returns>
95 public bool DeleteItem(LLUUID itemID) 133 public bool DeleteItem(LLUUID itemID)
96 { 134 {
97 bool found = false; 135 bool found = false;
98 if (Items.ContainsKey(itemID)) 136
137 lock (Items)
99 { 138 {
100 Items.Remove(itemID); 139 if (Items.ContainsKey(itemID))
101 return true; 140 {
141 Items.Remove(itemID);
142 return true;
143 }
102 } 144 }
103 foreach (InventoryFolderImpl folder in SubFolders.Values) 145
146 lock (SubFolders)
104 { 147 {
105 found = folder.DeleteItem(itemID); 148 foreach (InventoryFolderImpl folder in SubFolders.Values)
106 if (found == true)
107 { 149 {
108 break; 150 found = folder.DeleteItem(itemID);
151 if (found == true)
152 {
153 break;
154 }
109 } 155 }
110 } 156 }
111 return found; 157 return found;
112 } 158 }
113 159
114 160 /// <summary>
161 /// Does this folder contain the given subfolder?
162 /// </summary>
163 /// <returns></returns>
115 public InventoryFolderImpl HasSubFolder(LLUUID folderID) 164 public InventoryFolderImpl HasSubFolder(LLUUID folderID)
116 { 165 {
117 InventoryFolderImpl returnFolder = null; 166 InventoryFolderImpl returnFolder = null;
118 if (SubFolders.ContainsKey(folderID)) 167
119 { 168 lock (SubFolders)
120 returnFolder = SubFolders[folderID];
121 }
122 else
123 { 169 {
124 foreach (InventoryFolderImpl folder in SubFolders.Values) 170 if (SubFolders.ContainsKey(folderID))
125 { 171 {
126 returnFolder = folder.HasSubFolder(folderID); 172 returnFolder = SubFolders[folderID];
127 if (returnFolder != null) 173 }
174 else
175 {
176 foreach (InventoryFolderImpl folder in SubFolders.Values)
128 { 177 {
129 break; 178 returnFolder = folder.HasSubFolder(folderID);
179 if (returnFolder != null)
180 {
181 break;
182 }
130 } 183 }
131 } 184 }
132 } 185 }
186
133 return returnFolder; 187 return returnFolder;
134 } 188 }
135 189
190 /// <summary>
191 /// Return the list of items in this folder
192 /// </summary>
136 public List<InventoryItemBase> RequestListOfItems() 193 public List<InventoryItemBase> RequestListOfItems()
137 { 194 {
138 List<InventoryItemBase> itemList = new List<InventoryItemBase>(); 195 List<InventoryItemBase> itemList = new List<InventoryItemBase>();
139 foreach (InventoryItemBase item in Items.Values) 196
197 lock (Items)
140 { 198 {
141 itemList.Add(item); 199 foreach (InventoryItemBase item in Items.Values)
200 {
201 itemList.Add(item);
202 }
142 } 203 }
204
143 return itemList; 205 return itemList;
144 } 206 }
145 207
208 /// <summary>
209 /// Return the list of folders in this folder
210 /// </summary>
146 public List<InventoryFolderBase> RequestListOfFolders() 211 public List<InventoryFolderBase> RequestListOfFolders()
147 { 212 {
148 List<InventoryFolderBase> folderList = new List<InventoryFolderBase>(); 213 List<InventoryFolderBase> folderList = new List<InventoryFolderBase>();
149 foreach (InventoryFolderBase folder in SubFolders.Values) 214
215 lock (SubFolders)
150 { 216 {
151 folderList.Add(folder); 217 foreach (InventoryFolderBase folder in SubFolders.Values)
218 {
219 folderList.Add(folder);
220 }
152 } 221 }
222
153 return folderList; 223 return folderList;
154 } 224 }
155 } 225 }