From ae92bbcb95a94b71c74d2ff64e76eb2d0e12af7d Mon Sep 17 00:00:00 2001 From: "Justin Clark-Casey (justincc)" Date: Mon, 9 Nov 2009 17:04:05 +0000 Subject: [PATCH] refactor: break actual item load in iar into separate method --- .../Archiver/InventoryArchiveReadRequest.cs | 74 ++++++++++++------- 1 file changed, 46 insertions(+), 28 deletions(-) diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 4023c8f465..d82d0e3b70 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs @@ -138,35 +138,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver rootDestinationFolder, foldersCreated, nodesLoaded); if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType) - { - // Escape back characters - filePath = filePath.Replace("/", "/"); - filePath = filePath.Replace("&", "&"); - - InventoryItemBase item = UserInventoryItemSerializer.Deserialize(data); - - // Don't use the item ID that's in the file - item.ID = UUID.Random(); + { + InventoryItemBase item = LoadItem(data, foundFolder); - UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.CommsManager); - if (UUID.Zero != ospResolvedId) - item.CreatorIdAsUuid = ospResolvedId; - else - item.CreatorIdAsUuid = m_userInfo.UserProfile.ID; - - item.Owner = m_userInfo.UserProfile.ID; - - // Reset folder ID to the one in which we want to load it - item.Folder = foundFolder.ID; - - //m_userInfo.AddItem(item); - m_scene.InventoryService.AddItem(item); - successfulItemRestores++; - - // If we're loading an item directly into the given destination folder then we need to record - // it separately from any loaded root folders - if (rootDestinationFolder == foundFolder) - nodesLoaded.Add(item); + if (item != null) + { + successfulItemRestores++; + + // If we're loading an item directly into the given destination folder then we need to record + // it separately from any loaded root folders + if (rootDestinationFolder == foundFolder) + nodesLoaded.Add(item); + } } } } @@ -339,6 +322,41 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver */ } + /// + /// Load an item from the archive + /// + /// The archive path for the item + /// The raw item data + /// The root destination folder for loaded items + /// All the inventory nodes (items and folders) loaded so far + protected InventoryItemBase LoadItem(byte[] data, InventoryFolderBase loadFolder) + { + // Escape back characters +// filePath = filePath.Replace("/", "/"); +// filePath = filePath.Replace("&", "&"); + + InventoryItemBase item = UserInventoryItemSerializer.Deserialize(data); + + // Don't use the item ID that's in the file + item.ID = UUID.Random(); + + UUID ospResolvedId = OspResolver.ResolveOspa(item.CreatorId, m_scene.CommsManager); + if (UUID.Zero != ospResolvedId) + item.CreatorIdAsUuid = ospResolvedId; + else + item.CreatorIdAsUuid = m_userInfo.UserProfile.ID; + + item.Owner = m_userInfo.UserProfile.ID; + + // Reset folder ID to the one in which we want to load it + item.Folder = loadFolder.ID; + + //m_userInfo.AddItem(item); + m_scene.InventoryService.AddItem(item); + + return item; + } + /// /// Load an asset ///