diff options
author | Justin Clarke Casey | 2008-12-09 18:35:09 +0000 |
---|---|---|
committer | Justin Clarke Casey | 2008-12-09 18:35:09 +0000 |
commit | 762712c02e4abf332d2d9a0ba583d6fe6f406aff (patch) | |
tree | 673471a2715e6a73dc051dbbd5b8dbed57cde8c2 | |
parent | * Apply terrain flip patch from http://opensimulator.org/mantis/view.php?id=2315 (diff) | |
download | opensim-SC-762712c02e4abf332d2d9a0ba583d6fe6f406aff.zip opensim-SC-762712c02e4abf332d2d9a0ba583d6fe6f406aff.tar.gz opensim-SC-762712c02e4abf332d2d9a0ba583d6fe6f406aff.tar.bz2 opensim-SC-762712c02e4abf332d2d9a0ba583d6fe6f406aff.tar.xz |
* Actually update subfolders of parent folders in the inventory cache when a folder gets moved
* This was causing inventory folder transfer code to not work properly (this is still temporarily disabled)
3 files changed, 65 insertions, 9 deletions
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index b4e7bfa..c8656d5 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs | |||
@@ -397,14 +397,14 @@ namespace OpenSim.Framework.Communications.Cache | |||
397 | 397 | ||
398 | /// <summary> | 398 | /// <summary> |
399 | /// Handle a client request to update the inventory folder | 399 | /// Handle a client request to update the inventory folder |
400 | /// </summary> | ||
400 | /// | 401 | /// |
401 | /// If the inventory service has not yet delievered the inventory | 402 | /// If the inventory service has not yet delievered the inventory |
402 | /// for this user then the request will be queued. | 403 | /// for this user then the request will be queued. |
403 | /// | 404 | /// |
404 | /// FIXME: We call add new inventory folder because in the data layer, we happen to use an SQL REPLACE | 405 | /// FIXME: We call add new inventory folder because in the data layer, we happen to use an SQL REPLACE |
405 | /// so this will work to rename an existing folder. Needless to say, to rely on this is very confusing, | 406 | /// so this will work to rename an existing folder. Needless to say, to rely on this is very confusing, |
406 | /// and needs to be changed. | 407 | /// and needs to be changed. |
407 | /// </summary> | ||
408 | /// | 408 | /// |
409 | /// <param name="folderID"></param> | 409 | /// <param name="folderID"></param> |
410 | /// <param name="type"></param> | 410 | /// <param name="type"></param> |
@@ -461,6 +461,10 @@ namespace OpenSim.Framework.Communications.Cache | |||
461 | /// | 461 | /// |
462 | /// <param name="folderID"></param> | 462 | /// <param name="folderID"></param> |
463 | /// <param name="parentID"></param> | 463 | /// <param name="parentID"></param> |
464 | /// <returns> | ||
465 | /// true if the delete was successful, or if it was queued pending folder receipt | ||
466 | /// false if the folder to be deleted did not exist. | ||
467 | /// </returns> | ||
464 | public bool MoveFolder(UUID folderID, UUID parentID) | 468 | public bool MoveFolder(UUID folderID, UUID parentID) |
465 | { | 469 | { |
466 | // m_log.DebugFormat( | 470 | // m_log.DebugFormat( |
@@ -482,10 +486,27 @@ namespace OpenSim.Framework.Communications.Cache | |||
482 | { | 486 | { |
483 | m_commsManager.InventoryService.MoveFolder(baseFolder); | 487 | m_commsManager.InventoryService.MoveFolder(baseFolder); |
484 | } | 488 | } |
485 | 489 | ||
486 | InventoryFolderImpl folder = RootFolder.FindFolder(folderID); | 490 | InventoryFolderImpl folder = RootFolder.FindFolder(folderID); |
487 | if (folder != null) | 491 | InventoryFolderImpl parentFolder = RootFolder.FindFolder(parentID); |
488 | folder.ParentID = parentID; | 492 | if (parentFolder != null && folder != null) |
493 | { | ||
494 | InventoryFolderImpl oldParentFolder = RootFolder.FindFolder(folder.ParentID); | ||
495 | |||
496 | if (oldParentFolder != null) | ||
497 | { | ||
498 | oldParentFolder.RemoveChildFolder(folderID); | ||
499 | parentFolder.AddChildFolder(folder); | ||
500 | } | ||
501 | else | ||
502 | { | ||
503 | return false; | ||
504 | } | ||
505 | } | ||
506 | else | ||
507 | { | ||
508 | return false; | ||
509 | } | ||
489 | 510 | ||
490 | return true; | 511 | return true; |
491 | } | 512 | } |
@@ -502,10 +523,9 @@ namespace OpenSim.Framework.Communications.Cache | |||
502 | 523 | ||
503 | /// <summary> | 524 | /// <summary> |
504 | /// This method will delete all the items and folders in the given folder. | 525 | /// This method will delete all the items and folders in the given folder. |
505 | /// | 526 | /// </summary> |
506 | /// If the inventory service has not yet delievered the inventory | 527 | /// If the inventory service has not yet delievered the inventory |
507 | /// for this user then the request will be queued. | 528 | /// for this user then the request will be queued. |
508 | /// </summary> | ||
509 | /// | 529 | /// |
510 | /// <param name="folderID"></param> | 530 | /// <param name="folderID"></param> |
511 | public bool PurgeFolder(UUID folderID) | 531 | public bool PurgeFolder(UUID folderID) |
diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs index 0704232..83ac239 100644 --- a/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs +++ b/OpenSim/Framework/Communications/Cache/InventoryFolderImpl.cs | |||
@@ -92,6 +92,42 @@ namespace OpenSim.Framework.Communications.Cache | |||
92 | 92 | ||
93 | return null; | 93 | return null; |
94 | } | 94 | } |
95 | |||
96 | /// <summary> | ||
97 | /// Add a folder that already exists. | ||
98 | /// </summary> | ||
99 | /// <param name="folder"></param> | ||
100 | public void AddChildFolder(InventoryFolderImpl folder) | ||
101 | { | ||
102 | lock (SubFolders) | ||
103 | { | ||
104 | folder.ParentID = ID; | ||
105 | SubFolders[folder.ID] = folder; | ||
106 | } | ||
107 | } | ||
108 | |||
109 | /// <summary> | ||
110 | /// Removes the given child subfolder. | ||
111 | /// </summary> | ||
112 | /// <param name="folderID"></param> | ||
113 | /// <returns> | ||
114 | /// The folder removed, or null if the folder was not present. | ||
115 | /// </returns> | ||
116 | public InventoryFolderImpl RemoveChildFolder(UUID folderID) | ||
117 | { | ||
118 | InventoryFolderImpl removedFolder = null; | ||
119 | |||
120 | lock (SubFolders) | ||
121 | { | ||
122 | if (SubFolders.ContainsKey(folderID)) | ||
123 | { | ||
124 | removedFolder = SubFolders[folderID]; | ||
125 | SubFolders.Remove(folderID); | ||
126 | } | ||
127 | } | ||
128 | |||
129 | return removedFolder; | ||
130 | } | ||
95 | 131 | ||
96 | /// <summary> | 132 | /// <summary> |
97 | /// Delete all the folders and items in this folder. | 133 | /// Delete all the folders and items in this folder. |
diff --git a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs index 45102d8..b4f3e9f 100644 --- a/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs +++ b/OpenSim/Framework/Communications/Cache/UserProfileCacheService.cs | |||
@@ -274,8 +274,8 @@ namespace OpenSim.Framework.Communications.Cache | |||
274 | if (!userProfile.MoveFolder(folderID, parentID)) | 274 | if (!userProfile.MoveFolder(folderID, parentID)) |
275 | { | 275 | { |
276 | m_log.ErrorFormat( | 276 | m_log.ErrorFormat( |
277 | "[AGENT INVENTORY]: Failed to move folder for user {0} {1}", | 277 | "[AGENT INVENTORY]: Failed to move folder {0} to {1} for user {2}", |
278 | remoteClient.Name, remoteClient.AgentId); | 278 | folderID, parentID, remoteClient.Name); |
279 | } | 279 | } |
280 | } | 280 | } |
281 | else | 281 | else |