aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Inventory
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs2
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiverModule.cs3
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs169
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 }