aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework/Communications
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework/Communications')
-rw-r--r--OpenSim/Framework/Communications/Cache/CachedUserInfo.cs89
-rw-r--r--OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs34
2 files changed, 46 insertions, 77 deletions
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
index 6f7c4da..5b84958 100644
--- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
+++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs
@@ -239,6 +239,7 @@ namespace OpenSim.Framework.Communications.Cache
239 else 239 else
240 { 240 {
241 InventoryFolderImpl folder = RootFolder.FindFolder(folderInfo.ParentID); 241 InventoryFolderImpl folder = RootFolder.FindFolder(folderInfo.ParentID);
242
242 lock (folder.SubFolders) 243 lock (folder.SubFolders)
243 { 244 {
244 if (folder != null) 245 if (folder != null)
@@ -323,72 +324,40 @@ namespace OpenSim.Framework.Communications.Cache
323 324
324 if (HasInventory) 325 if (HasInventory)
325 { 326 {
326 if (RootFolder.ID == parentID) 327 InventoryFolderImpl parentFolder = RootFolder.FindFolder(parentID);
328
329 if (null == parentFolder)
327 { 330 {
328 InventoryFolderImpl createdFolder = RootFolder.CreateNewSubFolder(folderID, folderName, folderType); 331 m_log.WarnFormat(
332 "[AGENT INVENTORY]: Tried to create folder {0} {1} but the parent {2} does not exist",
333 folderName, folderID, parentID);
334
335 return false;
336 }
337
338 InventoryFolderImpl createdFolder = parentFolder.CreateChildFolder(folderID, folderName, folderType);
329 339
330 if (createdFolder != null) 340 if (createdFolder != null)
331 { 341 {
332 InventoryFolderBase createdBaseFolder = new InventoryFolderBase(); 342 InventoryFolderBase createdBaseFolder = new InventoryFolderBase();
333 createdBaseFolder.Owner = createdFolder.Owner; 343 createdBaseFolder.Owner = createdFolder.Owner;
334 createdBaseFolder.ID = createdFolder.ID; 344 createdBaseFolder.ID = createdFolder.ID;
335 createdBaseFolder.Name = createdFolder.Name; 345 createdBaseFolder.Name = createdFolder.Name;
336 createdBaseFolder.ParentID = createdFolder.ParentID; 346 createdBaseFolder.ParentID = createdFolder.ParentID;
337 createdBaseFolder.Type = createdFolder.Type; 347 createdBaseFolder.Type = createdFolder.Type;
338 createdBaseFolder.Version = createdFolder.Version; 348 createdBaseFolder.Version = createdFolder.Version;
339 349
340 m_commsManager.InventoryService.AddFolder(createdBaseFolder); 350 m_commsManager.InventoryService.AddFolder(createdBaseFolder);
341 351
342 return true; 352 return true;
343 }
344 else
345 {
346 m_log.WarnFormat(
347 "[AGENT INVENTORY]: Tried to create folder {0} {1} but the folder already exists",
348 folderName, folderID);
349
350 return false;
351 }
352 } 353 }
353 else 354 else
354 { 355 {
355 InventoryFolderImpl folder = RootFolder.FindFolder(parentID); 356 m_log.WarnFormat(
357 "[AGENT INVENTORY]: Tried to create folder {0} {1} but the folder already exists",
358 folderName, folderID);
356 359
357 if (folder != null) 360 return false;
358 {
359 InventoryFolderImpl createdFolder = folder.CreateNewSubFolder(folderID, folderName, folderType);
360
361 if (createdFolder != null)
362 {
363 InventoryFolderBase createdBaseFolder = new InventoryFolderBase();
364 createdBaseFolder.Owner = createdFolder.Owner;
365 createdBaseFolder.ID = createdFolder.ID;
366 createdBaseFolder.Name = createdFolder.Name;
367 createdBaseFolder.ParentID = createdFolder.ParentID;
368 createdBaseFolder.Type = createdFolder.Type;
369 createdBaseFolder.Version = createdFolder.Version;
370
371 m_commsManager.InventoryService.AddFolder(createdBaseFolder);
372
373 return true;
374 }
375 else
376 {
377 m_log.WarnFormat(
378 "[AGENT INVENTORY]: Tried to create folder {0} {1} but the folder already exists",
379 folderName, folderID);
380
381 return false;
382 }
383 }
384 else
385 {
386 m_log.WarnFormat(
387 "[AGENT INVENTORY]: Could not find parent folder with id {0} in order to create folder {1} {2}",
388 parentID, folderName, folderID);
389
390 return false;
391 }
392 } 361 }
393 } 362 }
394 else 363 else
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
index af05af3..c8cec69 100644
--- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
+++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs
@@ -69,7 +69,7 @@ namespace OpenSim.Framework.Communications.Cache
69 /// <param name="folderName"></param> 69 /// <param name="folderName"></param>
70 /// <param name="type"></param> 70 /// <param name="type"></param>
71 /// <returns>The newly created subfolder. Returns null if the folder already exists</returns> 71 /// <returns>The newly created subfolder. Returns null if the folder already exists</returns>
72 public InventoryFolderImpl CreateNewSubFolder(LLUUID folderID, string folderName, ushort type) 72 public InventoryFolderImpl CreateChildFolder(LLUUID folderID, string folderName, ushort type)
73 { 73 {
74 lock (SubFolders) 74 lock (SubFolders)
75 { 75 {
@@ -82,6 +82,7 @@ namespace OpenSim.Framework.Communications.Cache
82 subFold.ParentID = this.ID; 82 subFold.ParentID = this.ID;
83 subFold.Owner = Owner; 83 subFold.Owner = Owner;
84 SubFolders.Add(subFold.ID, subFold); 84 SubFolders.Add(subFold.ID, subFold);
85
85 return subFold; 86 return subFold;
86 } 87 }
87 } 88 }
@@ -135,7 +136,7 @@ namespace OpenSim.Framework.Communications.Cache
135 } 136 }
136 137
137 /// <summary> 138 /// <summary>
138 /// Delete an item from the folder. 139 /// Deletes an item if it exists in this folder or any children
139 /// </summary> 140 /// </summary>
140 /// <param name="folderID"></param> 141 /// <param name="folderID"></param>
141 /// <returns></returns> 142 /// <returns></returns>
@@ -157,6 +158,7 @@ namespace OpenSim.Framework.Communications.Cache
157 foreach (InventoryFolderImpl folder in SubFolders.Values) 158 foreach (InventoryFolderImpl folder in SubFolders.Values)
158 { 159 {
159 found = folder.DeleteItem(itemID); 160 found = folder.DeleteItem(itemID);
161
160 if (found == true) 162 if (found == true)
161 { 163 {
162 break; 164 break;
@@ -168,37 +170,35 @@ namespace OpenSim.Framework.Communications.Cache
168 } 170 }
169 171
170 /// <summary> 172 /// <summary>
171 /// Returns the folder requested if it exists as a descendent of this folder 173 /// Returns the folder requested if it is this folder or is a descendent of this folder. The search is depth
174 /// first.
172 /// </summary> 175 /// </summary>
173 /// <returns>The requested folder if it exists, null if it does not.</returns> 176 /// <returns>The requested folder if it exists, null if it does not.</returns>
174 public InventoryFolderImpl FindFolder(LLUUID folderID) 177 public InventoryFolderImpl FindFolder(LLUUID folderID)
175 { 178 {
176 InventoryFolderImpl returnFolder = null; 179 if (folderID == ID)
180 {
181 return this;
182 }
177 183
178 lock (SubFolders) 184 lock (SubFolders)
179 { 185 {
180 if (SubFolders.ContainsKey(folderID)) 186 foreach (InventoryFolderImpl folder in SubFolders.Values)
181 {
182 returnFolder = SubFolders[folderID];
183 }
184 else
185 { 187 {
186 foreach (InventoryFolderImpl folder in SubFolders.Values) 188 InventoryFolderImpl returnFolder = folder.FindFolder(folderID);
189
190 if (returnFolder != null)
187 { 191 {
188 returnFolder = folder.FindFolder(folderID); 192 return returnFolder;
189 if (returnFolder != null)
190 {
191 break;
192 }
193 } 193 }
194 } 194 }
195 } 195 }
196 196
197 return returnFolder; 197 return null;
198 } 198 }
199 199
200 /// <summary> 200 /// <summary>
201 /// Return the list of items in this folder 201 /// Return the list of child items in this folder
202 /// </summary> 202 /// </summary>
203 public List<InventoryItemBase> RequestListOfItems() 203 public List<InventoryItemBase> RequestListOfItems()
204 { 204 {