From b03eeeb9f6331ed36c61f55aef847ce3b2db7ba4 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 22 Aug 2009 10:24:26 -0700 Subject: * Fixes mantis http://opensimulator.org/mantis/view.php?id=4044. Turns out folders were never being removed from trash when they were singled out for purging in trash. They were being removed when Trash was purged as a whole. That behavior is now fixed for the new InventoryService set. * Removed left-overs from AssetInventoryServer. --- .../Communications/Tests/LoginServiceTests.cs | 5 ++++ OpenSim/Framework/IClientAPI.cs | 2 +- .../Region/ClientStack/LindenUDP/LLClientView.cs | 26 +++++++++-------- .../Inventory/BaseInventoryConnector.cs | 5 ++++ .../Inventory/HGInventoryBroker.cs | 17 +++++++++++ .../Inventory/LocalInventoryServiceConnector.cs | 5 ++++ .../Inventory/RemoteInventoryServiceConnector.cs | 12 ++++++++ OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 18 ++++-------- .../Framework/Scenes/Scene.PacketHandlers.cs | 2 +- .../Inventory/InventoryServerInConnector.cs | 13 +++++++++ .../Inventory/HGInventoryServiceConnector.cs | 13 +++++++++ .../Inventory/ISessionAuthInventoryService.cs | 5 ++++ .../Inventory/InventoryServiceConnector.cs | 23 +++++++++++++-- .../QuickAndDirtyInventoryServiceConnector.cs | 6 ++++ OpenSim/Services/Interfaces/IInventoryService.cs | 8 +++++ .../Services/InventoryService/InventoryService.cs | 16 ++++++++-- OpenSim/Tests/Common/Mock/TestInventoryService.cs | 5 ++++ bin/OpenSim.Grid.AssetInventoryServer.addin.xml | 24 --------------- bin/OpenSim.Grid.AssetInventoryServer.exe.config | 34 ---------------------- 19 files changed, 150 insertions(+), 89 deletions(-) delete mode 100644 bin/OpenSim.Grid.AssetInventoryServer.addin.xml delete mode 100644 bin/OpenSim.Grid.AssetInventoryServer.exe.config diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index 6f86704..57a908e 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs @@ -532,6 +532,11 @@ namespace OpenSim.Framework.Communications.Tests return false; } + public bool DeleteFolders(UUID ownerID, List ids) + { + return false; + } + public bool PurgeFolder(InventoryFolderBase folder) { return false; diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index c6cdcaa..444adf9 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -260,7 +260,7 @@ namespace OpenSim.Framework IClientAPI remoteClient, List itemIDs); public delegate void RemoveInventoryFolder( - IClientAPI remoteClient, UUID folderID); + IClientAPI remoteClient, List folderIDs); public delegate void RequestAsset(IClientAPI remoteClient, RequestAssetArgs transferRequest); diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index a7a5aa3..dd01780 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -7090,14 +7090,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (OnRemoveInventoryFolder != null) { handlerRemoveInventoryFolder = null; + List uuids = new List(); foreach (RemoveInventoryFolderPacket.FolderDataBlock datablock in removeFolder.FolderData) { - handlerRemoveInventoryFolder = OnRemoveInventoryFolder; - - if (handlerRemoveInventoryFolder != null) - { - handlerRemoveInventoryFolder(this, datablock.FolderID); - } + uuids.Add(datablock.FolderID); + } + handlerRemoveInventoryFolder = OnRemoveInventoryFolder; + if (handlerRemoveInventoryFolder != null) + { + handlerRemoveInventoryFolder(this, uuids); } } break; @@ -7114,14 +7115,15 @@ namespace OpenSim.Region.ClientStack.LindenUDP if (OnRemoveInventoryFolder != null) { handlerRemoveInventoryFolder = null; + List uuids = new List(); foreach (RemoveInventoryObjectsPacket.FolderDataBlock datablock in removeObject.FolderData) { - handlerRemoveInventoryFolder = OnRemoveInventoryFolder; - - if (handlerRemoveInventoryFolder != null) - { - handlerRemoveInventoryFolder(this, datablock.FolderID); - } + uuids.Add(datablock.FolderID); + } + handlerRemoveInventoryFolder = OnRemoveInventoryFolder; + if (handlerRemoveInventoryFolder != null) + { + handlerRemoveInventoryFolder(this, uuids); } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index d4cb616..bd32f3b 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs @@ -139,6 +139,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public abstract bool MoveFolder(InventoryFolderBase folder); /// + /// Delete a list of inventory folders (from trash) + /// + public abstract bool DeleteFolders(UUID ownerID, List folderIDs); + + /// /// Purge an inventory folder of all its items and subfolders. /// /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 787c6c8..1c66254 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -330,6 +330,23 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } } + public override bool DeleteFolders(UUID ownerID, List folderIDs) + { + if (folderIDs == null) + return false; + if (folderIDs.Count == 0) + return false; + + if (IsLocalGridUser(ownerID)) + return m_GridService.DeleteFolders(ownerID, folderIDs); + else + { + UUID sessionID = GetSessionID(ownerID); + string uri = GetUserInventoryURI(ownerID) + "/" + ownerID.ToString(); + return m_HGService.DeleteFolders(uri, folderIDs, sessionID); + } + } + public override bool MoveFolder(InventoryFolderBase folder) { if (folder == null) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index e6edcf2..66d11dd 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -258,6 +258,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_InventoryService.MoveFolder(folder); } + public override bool DeleteFolders(UUID ownerID, List folderIDs) + { + return m_InventoryService.DeleteFolders(ownerID, folderIDs); + } + /// /// Purge an inventory folder of all its items and subfolders. /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 201442c..0d32c77 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -243,6 +243,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.MoveFolder(folder.Owner.ToString(), folder, sessionID); } + public override bool DeleteFolders(UUID ownerID, List folderIDs) + { + if (folderIDs == null) + return false; + if (folderIDs.Count == 0) + return false; + + UUID sessionID = GetSessionID(ownerID); + return m_RemoteConnector.DeleteFolders(ownerID.ToString(), folderIDs, sessionID); + } + + public override bool PurgeFolder(InventoryFolderBase folder) { if (folder == null) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a9d361b..3301536 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -789,23 +789,15 @@ namespace OpenSim.Region.Framework.Scenes } /// - /// Removes an inventory folder. Although there is a packet in the Linden protocol for this, it may be - /// legacy and not currently used (purge folder is used to remove folders from trash instead). + /// Removes an inventory folder. This packet is sent when the user + /// right-clicks a folder that's already in trash and chooses "purge" /// /// /// - private void RemoveInventoryFolder(IClientAPI remoteClient, UUID folderID) + private void RemoveInventoryFolder(IClientAPI remoteClient, List folderIDs) { - // Unclear is this handler is ever called by the Linden client, but it might - - InventoryFolderBase folder = new InventoryFolderBase(folderID); - folder.Owner = remoteClient.AgentId; - InventoryFolderBase trash = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder); - if (trash != null) - { - folder.ParentID = trash.ID; - InventoryService.MoveFolder(folder); - } + m_log.DebugFormat("[SCENE INVENTORY]: RemoveInventoryFolders count {0}", folderIDs.Count); + InventoryService.DeleteFolders(remoteClient.AgentId, folderIDs); } private SceneObjectGroup GetGroupByPrim(uint localID) diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 2b815a2..d3e414f 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -552,7 +552,7 @@ namespace OpenSim.Region.Framework.Scenes public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) { - InventoryFolderBase folder = new InventoryFolderBase(folderID); + InventoryFolderBase folder = new InventoryFolderBase(folderID, remoteClient.AgentId); folder = InventoryService.GetFolder(folder); if (folder != null) { diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index 10336b0..998b322 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs @@ -106,6 +106,10 @@ namespace OpenSim.Server.Handlers.Inventory m_httpServer.AddStreamHandler( new RestDeserialiseSecureHandler, bool>( + "POST", "/DeleteFolders/", DeleteFolders, CheckAuthSession)); + + m_httpServer.AddStreamHandler( + new RestDeserialiseSecureHandler, bool>( "POST", "/DeleteItem/", DeleteItems, CheckAuthSession)); m_httpServer.AddStreamHandler( @@ -254,6 +258,15 @@ namespace OpenSim.Server.Handlers.Inventory return m_InventoryService.GetAssetPermissions(item.Owner, item.AssetID); } + public bool DeleteFolders(List items) + { + List uuids = new List(); + foreach (Guid g in items) + uuids.Add(new UUID(g)); + // oops we lost the user info here. Bad bad handlers + return m_InventoryService.DeleteFolders(UUID.Zero, uuids); + } + public bool DeleteItems(List items) { List uuids = new List(); diff --git a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs index 45e921a..1004fb9 100644 --- a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs @@ -201,6 +201,19 @@ namespace OpenSim.Services.Connectors.Inventory return false; } + public bool DeleteFolders(string id, List folders, UUID sessionID) + { + string url = string.Empty; + string userID = string.Empty; + + if (StringToUrlAndUserID(id, out url, out userID)) + { + ISessionAuthInventoryService connector = GetConnector(url); + return connector.DeleteFolders(userID, folders, sessionID); + } + return false; + } + public bool PurgeFolder(string id, InventoryFolderBase folder, UUID sessionID) { string url = string.Empty; diff --git a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs index c89c9b7..da8c7e2 100644 --- a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs +++ b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs @@ -89,6 +89,11 @@ namespace OpenSim.Services.Connectors bool MoveFolder(string userID, InventoryFolderBase folder, UUID session_id); /// + /// Delete a list of inventory folders (from trash) + /// + bool DeleteFolders(string userID, List folders, UUID session_id); + + /// /// Purge an inventory folder of all its items and subfolders. /// /// diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index 7c35bde..423ca75 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -308,6 +308,25 @@ namespace OpenSim.Services.Connectors return false; } + public bool DeleteFolders(string userID, List folderIDs, UUID sessionID) + { + try + { + List guids = new List(); + foreach (UUID u in folderIDs) + guids.Add(u.Guid); + return SynchronousRestSessionObjectPoster, bool>.BeginPostObject( + "POST", m_ServerURI + "/DeleteFolders/", guids, sessionID.ToString(), userID); + } + catch (Exception e) + { + m_log.ErrorFormat("[INVENTORY CONNECTOR]: Delete inventory folders operation failed, {0} {1}", + e.Source, e.Message); + } + + return false; + } + public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID) { try @@ -481,12 +500,12 @@ namespace OpenSim.Services.Connectors return null; } - public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID sessionID) + public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase folder, UUID sessionID) { try { return SynchronousRestSessionObjectPoster.BeginPostObject( - "POST", m_ServerURI + "/QueryFolder/", item, sessionID.ToString(), item.Owner.ToString()); + "POST", m_ServerURI + "/QueryFolder/", folder, sessionID.ToString(), userID); } catch (Exception e) { diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index cd283ff..a7aa138 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs @@ -136,6 +136,12 @@ namespace OpenSim.Services.Connectors return false; } + public bool DeleteFolders(UUID ownerID, List folderIDs) + { + return false; + } + + public bool PurgeFolder(InventoryFolderBase folder) { return false; diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index ebdb09a..c775090 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -122,6 +122,14 @@ namespace OpenSim.Services.Interfaces bool MoveFolder(InventoryFolderBase folder); /// + /// Delete an item from the user's inventory + /// + /// + /// true if the item was successfully deleted + //bool DeleteItem(InventoryItemBase item); + bool DeleteFolders(UUID userID, List folderIDs); + + /// /// Purge an inventory folder of all its items and subfolders. /// /// diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 45bbd37..0cf4af1 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -425,15 +425,27 @@ namespace OpenSim.Services.InventoryService return null; } - public virtual InventoryFolderBase GetFolder(InventoryFolderBase item) + public virtual InventoryFolderBase GetFolder(InventoryFolderBase folder) { - InventoryFolderBase result = m_Database.getInventoryFolder(item.ID); + m_log.DebugFormat("[INVENTORY SERVICE]: GetFolder {0}", folder.ID); + InventoryFolderBase result = m_Database.getInventoryFolder(folder.ID); if (result != null) return result; return null; } + public virtual bool DeleteFolders(UUID ownerID, List folderIDs) + { + foreach (UUID id in folderIDs) + { + InventoryFolderBase folder = new InventoryFolderBase(id, ownerID); + PurgeFolder(folder); + m_Database.deleteInventoryFolder(id); + } + return true; + } + /// /// Purge a folder of all items items and subfolders. /// diff --git a/OpenSim/Tests/Common/Mock/TestInventoryService.cs b/OpenSim/Tests/Common/Mock/TestInventoryService.cs index ee22e5e..5a0ee7c 100644 --- a/OpenSim/Tests/Common/Mock/TestInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/TestInventoryService.cs @@ -128,6 +128,11 @@ namespace OpenSim.Tests.Common.Mock return false; } + public bool DeleteFolders(UUID ownerID, List ids) + { + return false; + } + public bool PurgeFolder(InventoryFolderBase folder) { return false; diff --git a/bin/OpenSim.Grid.AssetInventoryServer.addin.xml b/bin/OpenSim.Grid.AssetInventoryServer.addin.xml deleted file mode 100644 index 1f1bdbd..0000000 --- a/bin/OpenSim.Grid.AssetInventoryServer.addin.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bin/OpenSim.Grid.AssetInventoryServer.exe.config b/bin/OpenSim.Grid.AssetInventoryServer.exe.config deleted file mode 100644 index e542cf2..0000000 --- a/bin/OpenSim.Grid.AssetInventoryServer.exe.config +++ /dev/null @@ -1,34 +0,0 @@ - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- cgit v1.1