mirror of
https://github.com/opensim/opensim.git
synced 2026-08-07 17:55:48 +08:00
more changes on task inventory offers
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -1155,7 +1155,7 @@ namespace OpenSim.Region.OptionalModules.Agent.InternetRelayClientView.Server
|
||||
|
||||
}
|
||||
|
||||
public void SendBulkUpdateInventory(InventoryNodeBase node)
|
||||
public void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -813,7 +813,7 @@ namespace OpenSim.Tests.Common
|
||||
{
|
||||
}
|
||||
|
||||
public virtual void SendBulkUpdateInventory(InventoryNodeBase node)
|
||||
public virtual void SendBulkUpdateInventory(InventoryNodeBase node, UUID? transactionID = null)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user