more changes on task inventory offers

This commit is contained in:
UbitUmarov
2020-08-21 22:24:49 +01:00
parent a38624baab
commit fd49254708
9 changed files with 33 additions and 67 deletions

View File

@@ -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.
///
/// <param name="node"></param>
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);

View File

@@ -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<BulkUpdateInventoryPacket.FolderDataBlock> folderDataBlocks
= new List<BulkUpdateInventoryPacket.FolderDataBlock>();
@@ -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();

View File

@@ -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<InventoryItemBase>() { 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));

View File

@@ -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);
}

View File

@@ -1687,14 +1687,14 @@ namespace OpenSim.Region.Framework.Scenes
}
}
public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> items)
public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List<UUID> 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);

View File

@@ -1155,7 +1155,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
}
public void SendBulkUpdateInventory(InventoryNodeBase node)
public void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null)
{
}

View File

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

View File

@@ -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)

View File

@@ -813,7 +813,7 @@ namespace OpenSim.Tests.Common
{
}
public virtual void SendBulkUpdateInventory(InventoryNodeBase node)
public virtual void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null)
{
}