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)
{
}