diff --git a/OpenMetaverse/InventoryManager.cs b/OpenMetaverse/InventoryManager.cs
index 5572f19d..b1041f14 100644
--- a/OpenMetaverse/InventoryManager.cs
+++ b/OpenMetaverse/InventoryManager.cs
@@ -900,6 +900,13 @@ namespace OpenMetaverse
///
public delegate void NotecardUploadedAssetCallback(bool success, string status, UUID itemID, UUID assetID);
+ ///
+ /// Fired when local inventory store needs to be updated. Generally at logout to update a local cache
+ ///
+ /// the assets UUID
+ /// The new AssetID of the item, or UUID.Zero
+ public delegate void SaveAssetToInventoryCallback(UUID itemID, UUID newAssetID);
+
#endregion Delegates
#region Events
@@ -943,6 +950,11 @@ namespace OpenMetaverse
///
public event TaskInventoryReplyCallback OnTaskInventoryReply;
+ ///
+ /// Fired when a SaveAssetToInventory packet is received, generally after the logout reply handler
+ ///
+ public event SaveAssetToInventoryCallback OnSaveAssetToInventory;
+
#endregion Events
#region String Arrays
@@ -3029,11 +3041,12 @@ namespace OpenMetaverse
private void SaveAssetIntoInventoryHandler(Packet packet, Simulator simulator)
{
- //SaveAssetIntoInventoryPacket save = (SaveAssetIntoInventoryPacket)packet;
-
- // FIXME: Find this item in the inventory structure and mark the parent as needing an update
- //save.InventoryData.ItemID;
- Logger.Log("SaveAssetIntoInventory packet received, someone write this function!", Helpers.LogLevel.Error, _Client);
+ if (OnSaveAssetToInventory != null)
+ {
+ SaveAssetIntoInventoryPacket save = (SaveAssetIntoInventoryPacket)packet;
+ try { OnSaveAssetToInventory(save.InventoryData.ItemID, save.InventoryData.NewAssetID); }
+ catch (Exception e) { Logger.Log(e.Message, Helpers.LogLevel.Error, _Client, e); }
+ }
}
private void InventoryDescendentsHandler(Packet packet, Simulator simulator)