diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index b98cec76e2..d010bd555a 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -379,7 +379,7 @@ namespace OpenSim.Framework.Communications.Cache baseFolder.Type = (short) type; baseFolder.Version = RootFolder.Version; - m_commsManager.InventoryService.AddFolder(baseFolder); + m_commsManager.InventoryService.UpdateFolder(baseFolder); } else { diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs index f7a885779c..8dc09bc8eb 100644 --- a/OpenSim/Framework/Communications/IInventoryServices.cs +++ b/OpenSim/Framework/Communications/IInventoryServices.cs @@ -57,6 +57,13 @@ namespace OpenSim.Framework.Communications /// true if the folder was successfully added bool AddFolder(InventoryFolderBase folder); + /// + /// Update a folder in the user's inventory + /// + /// + /// true if the folder was successfully updated + bool UpdateFolder(InventoryFolderBase folder); + /// /// Move an inventory folder to a new location /// diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs index dffeed3b64..89ccf9360e 100644 --- a/OpenSim/Framework/Communications/InventoryServiceBase.cs +++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs @@ -198,6 +198,21 @@ namespace OpenSim.Framework.Communications return true; } + // See IInventoryServices + public bool UpdateFolder(InventoryFolderBase folder) + { + m_log.DebugFormat( + "[AGENT INVENTORY]: Updating folder {0} {1} to folder {2}", folder.Name, folder.ID, folder.ParentID); + + foreach (KeyValuePair plugin in m_plugins) + { + plugin.Value.updateInventoryFolder(folder); + } + + // FIXME: Should return false on failure + return true; + } + // See IInventoryServices public bool MoveFolder(InventoryFolderBase folder) { diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs index 4300554225..a0688921fe 100644 --- a/OpenSim/Grid/InventoryServer/Main.cs +++ b/OpenSim/Grid/InventoryServer/Main.cs @@ -96,6 +96,10 @@ namespace OpenSim.Grid.InventoryServer new RestDeserialisehandler( "POST", "/NewFolder/", m_inventoryService.AddFolder)); + m_httpServer.AddStreamHandler( + new RestDeserialisehandler( + "POST", "/UpdateFolder/", m_inventoryService.UpdateFolder)); + m_httpServer.AddStreamHandler( new RestDeserialisehandler( "POST", "/MoveFolder/", m_inventoryService.MoveFolder)); diff --git a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs index 9b3d8781f3..dfc741aaf6 100644 --- a/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs +++ b/OpenSim/Region/Communications/OGS1/OGS1InventoryService.cs @@ -175,6 +175,26 @@ namespace OpenSim.Region.Communications.OGS1 return false; } + /// + /// + /// + /// + public bool UpdateFolder(InventoryFolderBase folder) + { + try + { + return SynchronousRestObjectPoster.BeginPostObject( + "POST", _inventoryServerUrl + "/UpdateFolder/", folder); + } + catch (WebException e) + { + m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: Update inventory folder operation failed, {0} {1}", + e.Source, e.Message); + } + + return false; + } + /// /// ///