From fd49254708ed636a94a83cd199283c04c0b4c9bb Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Fri, 21 Aug 2020 22:24:49 +0100 Subject: [PATCH] more changes on task inventory offers --- OpenSim/Framework/IClientAPI.cs | 11 +------- .../ClientStack/Linden/UDP/LLClientView.cs | 14 +++++----- .../Transfer/InventoryTransferModule.cs | 28 ++----------------- .../HGInventoryAccessModule.cs | 3 +- .../Framework/Scenes/Scene.Inventory.cs | 20 ++++++------- .../Server/IRCClientView.cs | 2 +- .../OptionalModules/World/NPC/NPCAvatar.cs | 2 +- .../Shared/Api/Implementation/LSL_Api.cs | 18 ++++++------ OpenSim/Tests/Common/Mock/TestClient.cs | 2 +- 9 files changed, 33 insertions(+), 67 deletions(-) diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index dde6afb21f..63807ec78a 100755 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs @@ -697,15 +697,6 @@ namespace OpenSim.Framework Kill = 0x80000000 // 1 << 31 } -/* included in .net 4.0 - public static class PrimUpdateFlagsExtensions - { - public static bool HasFlag(this PrimUpdateFlags updateFlags, PrimUpdateFlags flag) - { - return (updateFlags & flag) == flag; - } - } -*/ public interface IClientAPI { Vector3 StartPos { get; set; } @@ -1235,7 +1226,7 @@ namespace OpenSim.Framework /// (including all descendent folders) as well as the folder itself. /// /// - void SendBulkUpdateInventory(InventoryNodeBase node); + void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null); void SendXferPacket(ulong xferID, uint packet, byte[] XferData, int XferDataOffset, int XferDatapktLen, bool isTaskInventory); diff --git a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs index 853af0b374..440ad66743 100755 --- a/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/Linden/UDP/LLClientView.cs @@ -2547,10 +2547,10 @@ namespace OpenSim.Region.ClientStack.LindenUDP } } - protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase) + protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase, UUID? transationID) { // We will use the same transaction id for all the separate packets to be sent out in this update. - UUID transactionId = UUID.Random(); + UUID transactionId = transationID ?? UUID.Random(); List folderDataBlocks = new List(); @@ -2697,19 +2697,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP return itemBlock; } - public void SendBulkUpdateInventory(InventoryNodeBase node) + public void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transationID = null) { if (node is InventoryItemBase) - SendBulkUpdateInventoryItem((InventoryItemBase)node); + SendBulkUpdateInventoryItem((InventoryItemBase)node, transationID); else if (node is InventoryFolderBase) - SendBulkUpdateInventoryFolder((InventoryFolderBase)node); + SendBulkUpdateInventoryFolder((InventoryFolderBase)node, transationID); else if (node != null) m_log.ErrorFormat("[CLIENT]: {0} sent unknown inventory node named {1}", Name, node.Name); else m_log.ErrorFormat("[CLIENT]: {0} sent null inventory node", Name); } - protected void SendBulkUpdateInventoryItem(InventoryItemBase item) + protected void SendBulkUpdateInventoryItem(InventoryItemBase item, UUID? transationID = null) { const uint FULL_MASK_PERMISSIONS = (uint)0x7ffffff; @@ -2717,7 +2717,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP = (BulkUpdateInventoryPacket)PacketPool.Instance.GetPacket(PacketType.BulkUpdateInventory); bulkUpdate.AgentData.AgentID = AgentId; - bulkUpdate.AgentData.TransactionID = UUID.Random(); + bulkUpdate.AgentData.TransactionID = transationID ?? UUID.Random(); bulkUpdate.FolderData = new BulkUpdateInventoryPacket.FolderDataBlock[1]; bulkUpdate.FolderData[0] = new BulkUpdateInventoryPacket.FolderDataBlock(); diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index f5527cde74..b37a6beedd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs @@ -336,23 +336,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer { if(folder.ParentID != destinationFolderID) { - //previousParentFolderID = folder.ParentID; folder.ParentID = destinationFolderID; invService.MoveFolder(folder); - client.SendBulkUpdateInventory(folder); } + client.SendBulkUpdateInventory(folder, folder.ID); } } - - // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code). - //if (previousParentFolderID != null) - { - //InventoryFolderBase previousParentFolder = invService.GetFolder(agentID, previousParentFolderID.Value); - //if(previousParentFolder != null) - //scene.SendInventoryUpdate(client, previousParentFolder, true, true); - - //scene.SendInventoryUpdate(client, destinationFolder, true, true); - } break; } case InstantMessageDialog.InventoryDeclined: @@ -375,13 +364,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer InventoryItemBase item = invService.GetItem(agentID, inventoryID); InventoryFolderBase folder = null; - //UUID? previousParentFolderID = null; if (item != null) { if (trashFolder.ID != item.Folder) { - //previousParentFolderID = item.Folder; item.Folder = trashFolder.ID; invService.MoveItems(item.Owner, new List() { item }); client.SendInventoryItemCreateUpdate(item, 0); @@ -394,24 +381,13 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer { if (trashFolder.ID != folder.ParentID) { - //previousParentFolderID = folder.ParentID; folder.ParentID = trashFolder.ID; invService.MoveFolder(folder); - client.SendBulkUpdateInventory(folder); } + client.SendBulkUpdateInventory(folder); } } - // Tell client about updates to original parent and new parent (this should probably be factored with existing move item/folder code). - //if (previousParentFolderID != null) - { - //InventoryFolderBase previousParentFolder = invService.GetFolder(agentID, (UUID)previousParentFolderID); - //if(previousParentFolder != null) - //scene.SendInventoryUpdate(client, previousParentFolder, true, true); - - //scene.SendInventoryUpdate(client, trashFolder, true, true); - } - if (im.dialog == (byte)InstantMessageDialog.InventoryDeclined) { ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); diff --git a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs index ae0fa599d4..b57e17705f 100644 --- a/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs +++ b/OpenSim/Region/CoreModules/Framework/InventoryAccess/HGInventoryAccessModule.cs @@ -221,8 +221,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess if (type == AssetType.Link) return; - string userAssetServer = string.Empty; - if (IsForeignUser(avatarID, out userAssetServer) && userAssetServer != string.Empty && m_OutboundPermission) + if (IsForeignUser(avatarID, out string userAssetServer) && userAssetServer != string.Empty && m_OutboundPermission) { m_assMapper.Post(assetID, avatarID, userAssetServer); } diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 1b3d708cc1..88b18e2533 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1687,14 +1687,14 @@ namespace OpenSim.Region.Framework.Scenes } } - public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List items) + public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List items, bool sendUpdates = true) { ScenePresence avatar; IClientAPI remoteClient = null; if (TryGetScenePresence(destID, out avatar)) remoteClient = avatar.ControllingClient; -// ???? + SceneObjectPart destPart = GetSceneObjectPart(destID); if (destPart != null) // Move into a prim { @@ -1702,12 +1702,16 @@ namespace OpenSim.Region.Framework.Scenes MoveTaskInventoryItem(destID, host, itemID); return destID; // Prim folder ID == prim ID } -// /???? + + // move to a avatar inventory + if(remoteClient == null) + return UUID.Zero; InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID); + if(rootFolder == null) + return UUID.Zero; UUID newFolderID = UUID.Random(); - InventoryFolderBase newFolder = new InventoryFolderBase(newFolderID, category, destID, -1, rootFolder.ID, rootFolder.Version); InventoryService.AddFolder(newFolder); @@ -1715,23 +1719,19 @@ namespace OpenSim.Region.Framework.Scenes { string message; InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(destID, host, itemID, out message); - if (agentItem != null) { agentItem.Folder = newFolderID; - AddInventoryItem(agentItem); - RemoveNonCopyTaskItemFromPrim(host, itemID); } else { - if (remoteClient != null) - remoteClient.SendAgentAlertMessage(message, false); + remoteClient.SendAgentAlertMessage(message, false); } } - if (remoteClient != null) + if(sendUpdates) { SendInventoryUpdate(remoteClient, rootFolder, true, false); SendInventoryUpdate(remoteClient, newFolder, false, true); diff --git a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs index 2569f489ad..2f949b78cb 100755 --- a/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs +++ b/OpenSim/Region/OptionalModules/Agent/InternetRelayClientView/Server/IRCClientView.cs @@ -1155,7 +1155,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server } - public void SendBulkUpdateInventory(InventoryNodeBase node) + public void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null) { } diff --git a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs index d9b41d298c..58b9cfcbeb 100755 --- a/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs +++ b/OpenSim/Region/OptionalModules/World/NPC/NPCAvatar.cs @@ -861,7 +861,7 @@ namespace OpenSim.Region.OptionalModules.World.NPC { } - public virtual void SendBulkUpdateInventory(InventoryNodeBase node) + public virtual void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null) { } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 27f4701130..9d9575c588 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -7906,7 +7906,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api ScenePresence sp = null; bool isNotOwner = true; - if (!World.TryGetSceneObjectPart(destID, out SceneObjectPart destsop)) + if (!World.TryGetSceneObjectPart(destID, out SceneObjectPart destSop)) { if (!World.TryGetScenePresence(destID, out sp)) { @@ -7937,9 +7937,9 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0) continue; - if (destsop != null) + if (destSop != null) { - if(!World.Permissions.CanDoObjectInvToObjectInv(taskItem, m_host, destsop)) + if(!World.Permissions.CanDoObjectInvToObjectInv(taskItem, m_host, destSop)) continue; } else @@ -7961,7 +7961,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return; } - UUID folderID = m_ScriptEngine.World.MoveTaskInventoryItems(destID, category, m_host, itemList); + UUID folderID = m_ScriptEngine.World.MoveTaskInventoryItems(destID, category, m_host, itemList, false); if (folderID == UUID.Zero) { @@ -7970,7 +7970,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api return; } - if (destsop != null) + if (destSop != null) return; if (m_TransferModule != null) @@ -7982,16 +7982,16 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api GridInstantMessage msg = new GridInstantMessage(World, m_host.OwnerID, m_host.Name, destID, (byte)InstantMessageDialog.TaskInventoryOffered, - m_host.OwnerID == m_host.GroupID, string.Format("'{0}'", category), -// We won't go so far as to add a SLURL, but this is the format used by LL as of 2012-10-06 -// false, string.Format("'{0}' ( http://slurl.com/secondlife/{1}/{2}/{3}/{4} )", category, World.Name, (int)pos.X, (int)pos.Y, (int)pos.Z), + m_host.OwnerID == m_host.GroupID, + string.Format("'{0}'", category), + //string.Format("'{0}' ( http://slurl.com/secondlife/{1}/{2}/{3}/{4} )", category, World.Name, (int)pos.X, (int)pos.Y, (int)pos.Z), folderID, false, pos, bucket, false); m_TransferModule.SendInstantMessage(msg, delegate(bool success) {}); } - ScriptSleep(destsop == null ? 3000 : 100); + ScriptSleep(destSop == null ? 3000 : 100); } public void llSetVehicleType(int type) diff --git a/OpenSim/Tests/Common/Mock/TestClient.cs b/OpenSim/Tests/Common/Mock/TestClient.cs index 898d504ff5..07cb028fd3 100755 --- a/OpenSim/Tests/Common/Mock/TestClient.cs +++ b/OpenSim/Tests/Common/Mock/TestClient.cs @@ -813,7 +813,7 @@ namespace OpenSim.Tests.Common { } - public virtual void SendBulkUpdateInventory(InventoryNodeBase node) + public virtual void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null) { }