diff options
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory')
3 files changed, 131 insertions, 43 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index f7057fe..5a8544e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -656,4 +656,4 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
656 | m_assetsLoaded = true; | 656 | m_assetsLoaded = true; |
657 | } | 657 | } |
658 | } | 658 | } |
659 | } \ No newline at end of file | 659 | } |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs index 5854428..ea660bd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs | |||
@@ -519,6 +519,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
519 | return null; | 519 | return null; |
520 | } | 520 | } |
521 | 521 | ||
522 | return account; | ||
523 | /* | ||
522 | try | 524 | try |
523 | { | 525 | { |
524 | string encpass = Util.Md5Hash(pass); | 526 | string encpass = Util.Md5Hash(pass); |
@@ -539,6 +541,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
539 | m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e); | 541 | m_log.ErrorFormat("[INVENTORY ARCHIVER]: Could not authenticate password, {0}", e); |
540 | return null; | 542 | return null; |
541 | } | 543 | } |
544 | */ | ||
542 | } | 545 | } |
543 | 546 | ||
544 | /// <summary> | 547 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 0b10dd8..03aaaac 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs | |||
@@ -165,8 +165,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
165 | if (im.binaryBucket.Length < 17) // Invalid | 165 | if (im.binaryBucket.Length < 17) // Invalid |
166 | return; | 166 | return; |
167 | 167 | ||
168 | UUID receipientID = new UUID(im.toAgentID); | 168 | UUID recipientID = new UUID(im.toAgentID); |
169 | ScenePresence user = scene.GetScenePresence(receipientID); | 169 | ScenePresence user = scene.GetScenePresence(recipientID); |
170 | UUID copyID; | 170 | UUID copyID; |
171 | 171 | ||
172 | // First byte is the asset type | 172 | // First byte is the asset type |
@@ -181,7 +181,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
181 | folderID, new UUID(im.toAgentID)); | 181 | folderID, new UUID(im.toAgentID)); |
182 | 182 | ||
183 | InventoryFolderBase folderCopy | 183 | InventoryFolderBase folderCopy |
184 | = scene.GiveInventoryFolder(receipientID, client.AgentId, folderID, UUID.Zero); | 184 | = scene.GiveInventoryFolder(recipientID, client.AgentId, folderID, UUID.Zero); |
185 | 185 | ||
186 | if (folderCopy == null) | 186 | if (folderCopy == null) |
187 | { | 187 | { |
@@ -240,6 +240,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
240 | im.imSessionID = copyID.Guid; | 240 | im.imSessionID = copyID.Guid; |
241 | } | 241 | } |
242 | 242 | ||
243 | im.offline = 0; | ||
244 | |||
243 | // Send the IM to the recipient. The item is already | 245 | // Send the IM to the recipient. The item is already |
244 | // in their inventory, so it will not be lost if | 246 | // in their inventory, so it will not be lost if |
245 | // they are offline. | 247 | // they are offline. |
@@ -259,8 +261,42 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
259 | }); | 261 | }); |
260 | } | 262 | } |
261 | } | 263 | } |
262 | else if (im.dialog == (byte) InstantMessageDialog.InventoryAccepted) | 264 | else if (im.dialog == (byte) InstantMessageDialog.InventoryAccepted || |
265 | im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) | ||
263 | { | 266 | { |
267 | UUID inventoryID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip | ||
268 | IInventoryService invService = scene.InventoryService; | ||
269 | |||
270 | // Special case: folder redirect. | ||
271 | // RLV uses this | ||
272 | if (im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) | ||
273 | { | ||
274 | InventoryFolderBase folder = new InventoryFolderBase(inventoryID, client.AgentId); | ||
275 | folder = invService.GetFolder(folder); | ||
276 | |||
277 | if (folder != null) | ||
278 | { | ||
279 | if (im.binaryBucket.Length >= 16) | ||
280 | { | ||
281 | UUID destFolderID = new UUID(im.binaryBucket, 0); | ||
282 | if (destFolderID != UUID.Zero) | ||
283 | { | ||
284 | InventoryFolderBase destFolder = new InventoryFolderBase(destFolderID, client.AgentId); | ||
285 | destFolder = invService.GetFolder(destFolder); | ||
286 | if (destFolder != null) | ||
287 | { | ||
288 | if (folder.ParentID != destFolder.ID) | ||
289 | { | ||
290 | folder.ParentID = destFolder.ID; | ||
291 | invService.MoveFolder(folder); | ||
292 | client.SendBulkUpdateInventory(folder); | ||
293 | } | ||
294 | } | ||
295 | } | ||
296 | } | ||
297 | } | ||
298 | } | ||
299 | |||
264 | ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); | 300 | ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); |
265 | 301 | ||
266 | if (user != null) // Local | 302 | if (user != null) // Local |
@@ -270,27 +306,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
270 | else | 306 | else |
271 | { | 307 | { |
272 | if (m_TransferModule != null) | 308 | if (m_TransferModule != null) |
273 | m_TransferModule.SendInstantMessage(im, delegate(bool success) { | 309 | m_TransferModule.SendInstantMessage(im, delegate(bool success) {}); |
274 | |||
275 | // justincc - FIXME: Comment out for now. This code was added in commit db91044 Mon Aug 22 2011 | ||
276 | // and is apparently supposed to fix bulk inventory updates after accepting items. But | ||
277 | // instead it appears to cause two copies of an accepted folder for the receiving user in | ||
278 | // at least some cases. Folder/item update is already done when the offer is made (see code above) | ||
279 | |||
280 | // // Send BulkUpdateInventory | ||
281 | // IInventoryService invService = scene.InventoryService; | ||
282 | // UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item /folder, back from it's trip | ||
283 | // | ||
284 | // InventoryFolderBase folder = new InventoryFolderBase(inventoryEntityID, client.AgentId); | ||
285 | // folder = invService.GetFolder(folder); | ||
286 | // | ||
287 | // ScenePresence fromUser = scene.GetScenePresence(new UUID(im.fromAgentID)); | ||
288 | // | ||
289 | // // If the user has left the scene by the time the message comes back then we can't send | ||
290 | // // them the update. | ||
291 | // if (fromUser != null) | ||
292 | // fromUser.ControllingClient.SendBulkUpdateInventory(folder); | ||
293 | }); | ||
294 | } | 310 | } |
295 | } | 311 | } |
296 | 312 | ||
@@ -403,6 +419,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
403 | previousParentFolderID = folder.ParentID; | 419 | previousParentFolderID = folder.ParentID; |
404 | folder.ParentID = trashFolder.ID; | 420 | folder.ParentID = trashFolder.ID; |
405 | invService.MoveFolder(folder); | 421 | invService.MoveFolder(folder); |
422 | client.SendBulkUpdateInventory(folder); | ||
406 | } | 423 | } |
407 | } | 424 | } |
408 | 425 | ||
@@ -475,32 +492,100 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer | |||
475 | // Find agent to deliver to | 492 | // Find agent to deliver to |
476 | // | 493 | // |
477 | ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); | 494 | ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); |
495 | if (user == null) | ||
496 | return; | ||
478 | 497 | ||
479 | if (user != null) | 498 | // This requires a little bit of processing because we have to make the |
499 | // new item visible in the recipient's inventory here | ||
500 | // | ||
501 | if (im.dialog == (byte) InstantMessageDialog.InventoryOffered) | ||
480 | { | 502 | { |
481 | user.ControllingClient.SendInstantMessage(im); | 503 | if (im.binaryBucket.Length < 17) // Invalid |
504 | return; | ||
505 | |||
506 | UUID recipientID = new UUID(im.toAgentID); | ||
482 | 507 | ||
483 | if (im.dialog == (byte)InstantMessageDialog.InventoryOffered) | 508 | // First byte is the asset type |
484 | { | 509 | AssetType assetType = (AssetType)im.binaryBucket[0]; |
485 | AssetType assetType = (AssetType)im.binaryBucket[0]; | ||
486 | UUID inventoryID = new UUID(im.binaryBucket, 1); | ||
487 | 510 | ||
488 | IInventoryService invService = scene.InventoryService; | 511 | if (AssetType.Folder == assetType) |
489 | InventoryNodeBase node = null; | 512 | { |
490 | if (AssetType.Folder == assetType) | 513 | UUID folderID = new UUID(im.binaryBucket, 1); |
514 | |||
515 | InventoryFolderBase given = | ||
516 | new InventoryFolderBase(folderID, recipientID); | ||
517 | InventoryFolderBase folder = | ||
518 | scene.InventoryService.GetFolder(given); | ||
519 | |||
520 | if (folder != null) | ||
521 | user.ControllingClient.SendBulkUpdateInventory(folder); | ||
522 | } | ||
523 | else | ||
524 | { | ||
525 | UUID itemID = new UUID(im.binaryBucket, 1); | ||
526 | |||
527 | InventoryItemBase given = | ||
528 | new InventoryItemBase(itemID, recipientID); | ||
529 | InventoryItemBase item = | ||
530 | scene.InventoryService.GetItem(given); | ||
531 | |||
532 | if (item != null) | ||
491 | { | 533 | { |
492 | InventoryFolderBase folder = new InventoryFolderBase(inventoryID, new UUID(im.toAgentID)); | 534 | user.ControllingClient.SendBulkUpdateInventory(item); |
493 | node = invService.GetFolder(folder); | ||
494 | } | 535 | } |
495 | else | 536 | } |
537 | user.ControllingClient.SendInstantMessage(im); | ||
538 | } | ||
539 | if (im.dialog == (byte) InstantMessageDialog.TaskInventoryOffered) | ||
540 | { | ||
541 | if (im.binaryBucket.Length < 1) // Invalid | ||
542 | return; | ||
543 | |||
544 | UUID recipientID = new UUID(im.toAgentID); | ||
545 | |||
546 | // Bucket is the asset type | ||
547 | AssetType assetType = (AssetType)im.binaryBucket[0]; | ||
548 | |||
549 | if (AssetType.Folder == assetType) | ||
550 | { | ||
551 | UUID folderID = new UUID(im.imSessionID); | ||
552 | |||
553 | InventoryFolderBase given = | ||
554 | new InventoryFolderBase(folderID, recipientID); | ||
555 | InventoryFolderBase folder = | ||
556 | scene.InventoryService.GetFolder(given); | ||
557 | |||
558 | if (folder != null) | ||
559 | user.ControllingClient.SendBulkUpdateInventory(folder); | ||
560 | } | ||
561 | else | ||
562 | { | ||
563 | UUID itemID = new UUID(im.imSessionID); | ||
564 | |||
565 | InventoryItemBase given = | ||
566 | new InventoryItemBase(itemID, recipientID); | ||
567 | InventoryItemBase item = | ||
568 | scene.InventoryService.GetItem(given); | ||
569 | |||
570 | if (item != null) | ||
496 | { | 571 | { |
497 | InventoryItemBase item = new InventoryItemBase(inventoryID, new UUID(im.toAgentID)); | 572 | user.ControllingClient.SendBulkUpdateInventory(item); |
498 | node = invService.GetItem(item); | ||
499 | } | 573 | } |
500 | |||
501 | if (node != null) | ||
502 | user.ControllingClient.SendBulkUpdateInventory(node); | ||
503 | } | 574 | } |
575 | |||
576 | // Fix up binary bucket since this may be 17 chars long here | ||
577 | Byte[] bucket = new Byte[1]; | ||
578 | bucket[0] = im.binaryBucket[0]; | ||
579 | im.binaryBucket = bucket; | ||
580 | |||
581 | user.ControllingClient.SendInstantMessage(im); | ||
582 | } | ||
583 | else if (im.dialog == (byte) InstantMessageDialog.InventoryAccepted || | ||
584 | im.dialog == (byte) InstantMessageDialog.InventoryDeclined || | ||
585 | im.dialog == (byte) InstantMessageDialog.TaskInventoryDeclined || | ||
586 | im.dialog == (byte) InstantMessageDialog.TaskInventoryAccepted) | ||
587 | { | ||
588 | user.ControllingClient.SendInstantMessage(im); | ||
504 | } | 589 | } |
505 | } | 590 | } |
506 | } | 591 | } |