public Packet CopyInventoryItem(
            LLUUID itemID
            , LLUUID folderID
            , string newItemName
            )
        {
            CopyInventoryItemPacket p = new CopyInventoryItemPacket();

            p.AgentData.AgentID   = AgentID;
            p.AgentData.SessionID = SessionID;

            p.InventoryData    = new CopyInventoryItemPacket.InventoryDataBlock[1];
            p.InventoryData[0] = new CopyInventoryItemPacket.InventoryDataBlock();

            p.InventoryData[0].CallbackID = 0;
            p.InventoryData[0].OldAgentID = AgentID; //TODO: Find out what this is supposed to be.  Added field 10/11/06, no docs in Message Template

            p.InventoryData[0].OldItemID   = itemID;
            p.InventoryData[0].NewFolderID = folderID;

            if (newItemName != null)
            {
                p.InventoryData[0].NewName = Helpers.StringToField(newItemName);
            }

            return(p);
        }
Exemple #2
0
        public void RequestCopyItems(List<LLUUID> items, List<LLUUID> targetFolders, List<string> newNames,
            LLUUID oldOwnerID, ItemCopiedCallback callback)
        {
            if (items.Count != targetFolders.Count || (newNames != null && items.Count != newNames.Count))
                throw new ArgumentException("All list arguments must have an equal number of entries");

            uint callbackID = RegisterItemsCopiedCallback(callback);

            CopyInventoryItemPacket copy = new CopyInventoryItemPacket();
            copy.AgentData.AgentID = _Client.Self.AgentID;
            copy.AgentData.SessionID = _Client.Self.SessionID;

            copy.InventoryData = new CopyInventoryItemPacket.InventoryDataBlock[items.Count];
            for (int i = 0; i < items.Count; ++i)
            {
                copy.InventoryData[i] = new CopyInventoryItemPacket.InventoryDataBlock();
                copy.InventoryData[i].CallbackID = callbackID;
                copy.InventoryData[i].NewFolderID = targetFolders[i];
                copy.InventoryData[i].OldAgentID = oldOwnerID;
                copy.InventoryData[i].OldItemID = items[i];

                if (newNames != null && !String.IsNullOrEmpty(newNames[i]))
                    copy.InventoryData[i].NewName = Helpers.StringToField(newNames[i]);
                else
                    copy.InventoryData[i].NewName = new byte[0];
            }

            _Client.Network.SendPacket(copy);
        }
        public Packet CopyInventoryItem(
            LLUUID itemID
            , LLUUID folderID
            , string newItemName
            )
        {
            CopyInventoryItemPacket p = new CopyInventoryItemPacket();
            p.AgentData.AgentID = AgentID;
            p.AgentData.SessionID = SessionID;

            p.InventoryData = new CopyInventoryItemPacket.InventoryDataBlock[1];
            p.InventoryData[0] = new CopyInventoryItemPacket.InventoryDataBlock();

            p.InventoryData[0].CallbackID = 0;
            p.InventoryData[0].OldAgentID = AgentID; //TODO: Find out what this is supposed to be.  Added field 10/11/06, no docs in Message Template

            p.InventoryData[0].OldItemID = itemID;
            p.InventoryData[0].NewFolderID = folderID;

            if (newItemName != null)
            {
                p.InventoryData[0].NewName = Helpers.StringToField(newItemName);
            }

            return p;
        }
Exemple #4
0
        public bool CopyInventoryItem(CopyInventoryItemPacket invPacket)
        {
            if (invPacket.AgentData.AgentID.Equals(libOwner))
                // Tell grid surfer to forward request to region, because the Library is served from there (!)
                return false;

            if (connected)
            {
                string uri = InventoryServerURL + "/" + AuthToken + "/CopyItem/";
                Console.WriteLine(" >> CopyItem length " + invPacket.InventoryData.Length);
                foreach (CopyInventoryItemPacket.InventoryDataBlock datablock in invPacket.InventoryData)
                {
                    InventoryItemBase item = new InventoryItemBase();
                    item.Owner = datablock.OldAgentID;
                    item.ID = datablock.OldItemID;
                    // Warning: BIG HACK HERE, so that we can get this UUID back to fetch the callbakID
                    item.AssetID = UUID.Random();
                    item.Folder = datablock.NewFolderID;
                    item.Name = Util.FieldToString(datablock.NewName);
                    lock (invCallbackNumbers)
                    {
                        if (!invCallbackNumbers.ContainsKey(item.ID))
                            invCallbackNumbers.Add(item.AssetID, datablock.CallbackID);
                    }
                    OpenSimComms.InventoryItemOperation(uri, item, InventoryItemCreateCallBack);
                }
            }
            return true;
        }