* refactor: move archive user inventory item serialization out to a separate file
parent
0d51c22620
commit
1ccc99a3f9
|
@ -34,16 +34,14 @@ using OpenSim.Framework;
|
||||||
namespace OpenSim.Framework.Serialization.External
|
namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize and deserialize region settings for an archive file format.
|
/// Serialize and deserialize region settings as an external format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// We didn't simply use automatic .NET serializagion for OpenSim.Framework.RegionSettings since this is really
|
|
||||||
/// a file format rather than an object serialization.
|
|
||||||
public class RegionSettingsSerializer
|
public class RegionSettingsSerializer
|
||||||
{
|
{
|
||||||
protected static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding();
|
protected static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deserialize region settings
|
/// Deserialize settings
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="serializedSettings"></param>
|
/// <param name="serializedSettings"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
@ -54,7 +52,7 @@ namespace OpenSim.Framework.Serialization.External
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deserialize region settings
|
/// Deserialize settings
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="serializedSettings"></param>
|
/// <param name="serializedSettings"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
|
|
|
@ -0,0 +1,198 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) Contributors, http://opensimulator.org/
|
||||||
|
* See CONTRIBUTORS.TXT for a full list of copyright holders.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
* * Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* * Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
* * Neither the name of the OpenSim Project nor the
|
||||||
|
* names of its contributors may be used to endorse or promote products
|
||||||
|
* derived from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
|
||||||
|
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
|
||||||
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||||
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
||||||
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||||
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||||
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Text;
|
||||||
|
using System.Xml;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using OpenSim.Framework;
|
||||||
|
|
||||||
|
namespace OpenSim.Framework.Serialization.External
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Serialize and deserialize user inventory items as an external format.
|
||||||
|
/// </summary>
|
||||||
|
/// XXX: Please do not use yet.
|
||||||
|
public class UserInventoryItemSerializer
|
||||||
|
{
|
||||||
|
protected static ASCIIEncoding m_asciiEncoding = new ASCIIEncoding();
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialize item
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serializedSettings"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="System.Xml.XmlException"></exception>
|
||||||
|
public static InventoryItemBase Deserialize(byte[] serialization)
|
||||||
|
{
|
||||||
|
return Deserialize(m_asciiEncoding.GetString(serialization, 0, serialization.Length));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Deserialize settings
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serializedSettings"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
/// <exception cref="System.Xml.XmlException"></exception>
|
||||||
|
public static InventoryItemBase Deserialize(string serialization)
|
||||||
|
{
|
||||||
|
InventoryItemBase item = new InventoryItemBase();
|
||||||
|
|
||||||
|
StringReader sr = new StringReader(serialization);
|
||||||
|
XmlTextReader reader = new XmlTextReader(sr);
|
||||||
|
|
||||||
|
reader.ReadStartElement("InventoryItem");
|
||||||
|
reader.ReadStartElement("Name");
|
||||||
|
item.Name = reader.ReadString();
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("ID");
|
||||||
|
item.ID = UUID.Parse(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("InvType");
|
||||||
|
item.InvType = Convert.ToInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("CreatorUUID");
|
||||||
|
item.CreatorId = reader.ReadString();
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("CreationDate");
|
||||||
|
item.CreationDate = Convert.ToInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("Owner");
|
||||||
|
item.Owner = UUID.Parse(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadElementString("Description");
|
||||||
|
reader.ReadStartElement("AssetType");
|
||||||
|
item.AssetType = Convert.ToInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("AssetID");
|
||||||
|
item.AssetID = UUID.Parse(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("SaleType");
|
||||||
|
item.SaleType = Convert.ToByte(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("SalePrice");
|
||||||
|
item.SalePrice = Convert.ToInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("BasePermissions");
|
||||||
|
item.BasePermissions = Convert.ToUInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("CurrentPermissions");
|
||||||
|
item.CurrentPermissions = Convert.ToUInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("EveryOnePermssions");
|
||||||
|
item.EveryOnePermissions = Convert.ToUInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("NextPermissions");
|
||||||
|
item.NextPermissions = Convert.ToUInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("Flags");
|
||||||
|
item.Flags = Convert.ToUInt32(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("GroupID");
|
||||||
|
item.GroupID = UUID.Parse(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
reader.ReadStartElement("GroupOwned");
|
||||||
|
item.GroupOwned = Convert.ToBoolean(reader.ReadString());
|
||||||
|
reader.ReadEndElement();
|
||||||
|
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Serialize(InventoryItemBase inventoryItem)
|
||||||
|
{
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
XmlTextWriter writer = new XmlTextWriter(sw);
|
||||||
|
writer.Formatting = Formatting.Indented;
|
||||||
|
writer.WriteStartDocument();
|
||||||
|
|
||||||
|
writer.WriteStartElement("InventoryItem");
|
||||||
|
|
||||||
|
writer.WriteStartElement("Name");
|
||||||
|
writer.WriteString(inventoryItem.Name);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("ID");
|
||||||
|
writer.WriteString(inventoryItem.ID.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("InvType");
|
||||||
|
writer.WriteString(inventoryItem.InvType.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("CreatorUUID");
|
||||||
|
writer.WriteString(inventoryItem.CreatorId);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("CreationDate");
|
||||||
|
writer.WriteString(inventoryItem.CreationDate.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("Owner");
|
||||||
|
writer.WriteString(inventoryItem.Owner.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("Description");
|
||||||
|
writer.WriteString(inventoryItem.Description);
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("AssetType");
|
||||||
|
writer.WriteString(inventoryItem.AssetType.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("AssetID");
|
||||||
|
writer.WriteString(inventoryItem.AssetID.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("SaleType");
|
||||||
|
writer.WriteString(inventoryItem.SaleType.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("SalePrice");
|
||||||
|
writer.WriteString(inventoryItem.SalePrice.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("BasePermissions");
|
||||||
|
writer.WriteString(inventoryItem.BasePermissions.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("CurrentPermissions");
|
||||||
|
writer.WriteString(inventoryItem.CurrentPermissions.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("EveryOnePermssions");
|
||||||
|
writer.WriteString(inventoryItem.EveryOnePermissions.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("NextPermissions");
|
||||||
|
writer.WriteString(inventoryItem.NextPermissions.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("Flags");
|
||||||
|
writer.WriteString(inventoryItem.Flags.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("GroupID");
|
||||||
|
writer.WriteString(inventoryItem.GroupID.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
writer.WriteStartElement("GroupOwned");
|
||||||
|
writer.WriteString(inventoryItem.GroupOwned.ToString());
|
||||||
|
writer.WriteEndElement();
|
||||||
|
|
||||||
|
writer.WriteEndElement();
|
||||||
|
|
||||||
|
writer.Close();
|
||||||
|
sw.Close();
|
||||||
|
|
||||||
|
return sw.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -33,10 +33,8 @@ using OpenSim.Framework;
|
||||||
namespace OpenSim.Framework.Serialization.External
|
namespace OpenSim.Framework.Serialization.External
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Serialize and deserialize region settings for an archive file format.
|
/// Serialize and deserialize region settings as an external format.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// We didn't use automatic .NET serialization since this is really
|
|
||||||
/// a file format rather than an object serialization.
|
|
||||||
public class UserProfileSerializer
|
public class UserProfileSerializer
|
||||||
{
|
{
|
||||||
public const int MAJOR_VERSION = 0;
|
public const int MAJOR_VERSION = 0;
|
||||||
|
|
|
@ -34,6 +34,7 @@ using System.Reflection;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Serialization;
|
using OpenSim.Framework.Serialization;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
using OpenSim.Framework.Servers;
|
using OpenSim.Framework.Servers;
|
||||||
using log4net;
|
using log4net;
|
||||||
|
|
||||||
|
@ -178,7 +179,8 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins
|
||||||
return rootFolder;
|
return rootFolder;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void WriteInventoryFolderToArchive(TarArchiveWriter archive, InventoryFolderWithChildren folder, string path)
|
private static void WriteInventoryFolderToArchive(
|
||||||
|
TarArchiveWriter archive, InventoryFolderWithChildren folder, string path)
|
||||||
{
|
{
|
||||||
path += string.Format("{0}{1}{2}/", folder.Name, ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folder.ID);
|
path += string.Format("{0}{1}{2}/", folder.Name, ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folder.ID);
|
||||||
archive.WriteDir(path);
|
archive.WriteDir(path);
|
||||||
|
@ -199,71 +201,8 @@ namespace OpenSim.Grid.AssetInventoryServer.Plugins
|
||||||
private static void WriteInventoryItemToArchive(TarArchiveWriter archive, InventoryItemBase item, string path)
|
private static void WriteInventoryItemToArchive(TarArchiveWriter archive, InventoryItemBase item, string path)
|
||||||
{
|
{
|
||||||
string filename = string.Format("{0}{1}_{2}.xml", path, item.Name, item.ID);
|
string filename = string.Format("{0}{1}_{2}.xml", path, item.Name, item.ID);
|
||||||
|
string serialization = UserInventoryItemSerializer.Serialize(item);
|
||||||
StringWriter sw = new StringWriter();
|
archive.WriteFile(filename, serialization);
|
||||||
XmlTextWriter writer = new XmlTextWriter(sw);
|
|
||||||
writer.Formatting = Formatting.Indented;
|
|
||||||
|
|
||||||
writer.WriteStartElement("InventoryItem");
|
|
||||||
|
|
||||||
writer.WriteStartElement("Name");
|
|
||||||
writer.WriteString(item.Name);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("ID");
|
|
||||||
writer.WriteString(item.ID.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("InvType");
|
|
||||||
writer.WriteString(item.InvType.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("CreatorUUID");
|
|
||||||
writer.WriteString(item.CreatorId);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("CreationDate");
|
|
||||||
writer.WriteString(item.CreationDate.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("Owner");
|
|
||||||
writer.WriteString(item.Owner.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("Description");
|
|
||||||
writer.WriteString(item.Description);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("AssetType");
|
|
||||||
writer.WriteString(item.AssetType.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("AssetID");
|
|
||||||
writer.WriteString(item.AssetID.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("SaleType");
|
|
||||||
writer.WriteString(item.SaleType.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("SalePrice");
|
|
||||||
writer.WriteString(item.SalePrice.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("BasePermissions");
|
|
||||||
writer.WriteString(item.BasePermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("CurrentPermissions");
|
|
||||||
writer.WriteString(item.CurrentPermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("EveryOnePermssions");
|
|
||||||
writer.WriteString(item.EveryOnePermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("NextPermissions");
|
|
||||||
writer.WriteString(item.NextPermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("Flags");
|
|
||||||
writer.WriteString(item.Flags.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("GroupID");
|
|
||||||
writer.WriteString(item.GroupID.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("GroupOwned");
|
|
||||||
writer.WriteString(item.GroupOwned.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
|
|
||||||
writer.WriteEndElement();
|
|
||||||
|
|
||||||
archive.WriteFile(filename, sw.ToString());
|
|
||||||
|
|
||||||
//m_assetGatherer.GatherAssetUuids(item.AssetID, (AssetType) item.AssetType, assetUuids);
|
//m_assetGatherer.GatherAssetUuids(item.AssetID, (AssetType) item.AssetType, assetUuids);
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,6 +36,7 @@ using log4net;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
using OpenSim.Framework;
|
using OpenSim.Framework;
|
||||||
using OpenSim.Framework.Serialization;
|
using OpenSim.Framework.Serialization;
|
||||||
|
using OpenSim.Framework.Serialization.External;
|
||||||
using OpenSim.Framework.Communications;
|
using OpenSim.Framework.Communications;
|
||||||
using OpenSim.Framework.Communications.Cache;
|
using OpenSim.Framework.Communications.Cache;
|
||||||
using OpenSim.Region.CoreModules.World.Archiver;
|
using OpenSim.Region.CoreModules.World.Archiver;
|
||||||
|
@ -78,71 +79,6 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
this.commsManager = commsManager;
|
this.commsManager = commsManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected InventoryItemBase LoadInvItem(string contents)
|
|
||||||
{
|
|
||||||
InventoryItemBase item = new InventoryItemBase();
|
|
||||||
StringReader sr = new StringReader(contents);
|
|
||||||
XmlTextReader reader = new XmlTextReader(sr);
|
|
||||||
|
|
||||||
if (contents.Equals("")) return null;
|
|
||||||
|
|
||||||
reader.ReadStartElement("InventoryItem");
|
|
||||||
reader.ReadStartElement("Name");
|
|
||||||
item.Name = reader.ReadString();
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("ID");
|
|
||||||
item.ID = UUID.Parse(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("InvType");
|
|
||||||
item.InvType = Convert.ToInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("CreatorUUID");
|
|
||||||
item.CreatorId = reader.ReadString();
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("CreationDate");
|
|
||||||
item.CreationDate = Convert.ToInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("Owner");
|
|
||||||
item.Owner = UUID.Parse(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadElementString("Description");
|
|
||||||
reader.ReadStartElement("AssetType");
|
|
||||||
item.AssetType = Convert.ToInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("AssetID");
|
|
||||||
item.AssetID = UUID.Parse(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("SaleType");
|
|
||||||
item.SaleType = Convert.ToByte(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("SalePrice");
|
|
||||||
item.SalePrice = Convert.ToInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("BasePermissions");
|
|
||||||
item.BasePermissions = Convert.ToUInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("CurrentPermissions");
|
|
||||||
item.CurrentPermissions = Convert.ToUInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("EveryOnePermssions");
|
|
||||||
item.EveryOnePermissions = Convert.ToUInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("NextPermissions");
|
|
||||||
item.NextPermissions = Convert.ToUInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("Flags");
|
|
||||||
item.Flags = Convert.ToUInt32(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("GroupID");
|
|
||||||
item.GroupID = UUID.Parse(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
reader.ReadStartElement("GroupOwned");
|
|
||||||
item.GroupOwned = Convert.ToBoolean(reader.ReadString());
|
|
||||||
reader.ReadEndElement();
|
|
||||||
|
|
||||||
return item;
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Execute the request
|
/// Execute the request
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -322,27 +258,24 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
|
if (TarArchiveReader.TarEntryType.TYPE_DIRECTORY != entryType)
|
||||||
{
|
{
|
||||||
InventoryItemBase item = LoadInvItem(m_asciiEncoding.GetString(data));
|
InventoryItemBase item = UserInventoryItemSerializer.Deserialize(data);
|
||||||
|
|
||||||
if (item != null)
|
// Don't use the item ID that's in the file
|
||||||
{
|
item.ID = UUID.Random();
|
||||||
// Don't use the item ID that's in the file
|
|
||||||
item.ID = UUID.Random();
|
|
||||||
|
|
||||||
item.CreatorId = m_userInfo.UserProfile.ID.ToString();
|
item.CreatorId = m_userInfo.UserProfile.ID.ToString();
|
||||||
item.Owner = m_userInfo.UserProfile.ID;
|
item.Owner = m_userInfo.UserProfile.ID;
|
||||||
|
|
||||||
// Reset folder ID to the one in which we want to load it
|
// Reset folder ID to the one in which we want to load it
|
||||||
item.Folder = foundFolder.ID;
|
item.Folder = foundFolder.ID;
|
||||||
|
|
||||||
m_userInfo.AddItem(item);
|
m_userInfo.AddItem(item);
|
||||||
successfulItemRestores++;
|
successfulItemRestores++;
|
||||||
|
|
||||||
// If we're loading an item directly into the given destination folder then we need to record
|
// If we're loading an item directly into the given destination folder then we need to record
|
||||||
// it separately from any loaded root folders
|
// it separately from any loaded root folders
|
||||||
if (rootDestinationFolder == foundFolder)
|
if (rootDestinationFolder == foundFolder)
|
||||||
nodesLoaded.Add(item);
|
nodesLoaded.Add(item);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -124,70 +124,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
protected void SaveInvItem(InventoryItemBase inventoryItem, string path)
|
protected void SaveInvItem(InventoryItemBase inventoryItem, string path)
|
||||||
{
|
{
|
||||||
string filename = string.Format("{0}{1}_{2}.xml", path, inventoryItem.Name, inventoryItem.ID);
|
string filename = string.Format("{0}{1}_{2}.xml", path, inventoryItem.Name, inventoryItem.ID);
|
||||||
StringWriter sw = new StringWriter();
|
string serialization = UserInventoryItemSerializer.Serialize(inventoryItem);
|
||||||
XmlTextWriter writer = new XmlTextWriter(sw);
|
m_archive.WriteFile(filename, serialization);
|
||||||
writer.Formatting = Formatting.Indented;
|
|
||||||
|
|
||||||
writer.WriteStartElement("InventoryItem");
|
|
||||||
|
|
||||||
writer.WriteStartElement("Name");
|
|
||||||
writer.WriteString(inventoryItem.Name);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("ID");
|
|
||||||
writer.WriteString(inventoryItem.ID.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("InvType");
|
|
||||||
writer.WriteString(inventoryItem.InvType.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("CreatorUUID");
|
|
||||||
writer.WriteString(inventoryItem.CreatorId);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("CreationDate");
|
|
||||||
writer.WriteString(inventoryItem.CreationDate.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("Owner");
|
|
||||||
writer.WriteString(inventoryItem.Owner.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("Description");
|
|
||||||
writer.WriteString(inventoryItem.Description);
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("AssetType");
|
|
||||||
writer.WriteString(inventoryItem.AssetType.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("AssetID");
|
|
||||||
writer.WriteString(inventoryItem.AssetID.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("SaleType");
|
|
||||||
writer.WriteString(inventoryItem.SaleType.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("SalePrice");
|
|
||||||
writer.WriteString(inventoryItem.SalePrice.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("BasePermissions");
|
|
||||||
writer.WriteString(inventoryItem.BasePermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("CurrentPermissions");
|
|
||||||
writer.WriteString(inventoryItem.CurrentPermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("EveryOnePermssions");
|
|
||||||
writer.WriteString(inventoryItem.EveryOnePermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("NextPermissions");
|
|
||||||
writer.WriteString(inventoryItem.NextPermissions.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("Flags");
|
|
||||||
writer.WriteString(inventoryItem.Flags.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("GroupID");
|
|
||||||
writer.WriteString(inventoryItem.GroupID.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
writer.WriteStartElement("GroupOwned");
|
|
||||||
writer.WriteString(inventoryItem.GroupOwned.ToString());
|
|
||||||
writer.WriteEndElement();
|
|
||||||
|
|
||||||
writer.WriteEndElement();
|
|
||||||
|
|
||||||
m_archive.WriteFile(filename, sw.ToString());
|
|
||||||
|
|
||||||
UUID creatorId = inventoryItem.CreatorIdAsUuid;
|
UUID creatorId = inventoryItem.CreatorIdAsUuid;
|
||||||
|
|
||||||
|
|
|
@ -188,5 +188,73 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
|
|
||||||
// TODO: Test presence of more files and contents of files.
|
// TODO: Test presence of more files and contents of files.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
/// <summary>
|
||||||
|
/// Test loading a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet).
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestLoadIarV0p1()
|
||||||
|
{
|
||||||
|
//log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
|
TarArchiveWriter tar = new TarArchiveWriter(archiveWriteStream);
|
||||||
|
|
||||||
|
string item1FileName = string.Format("{0}{1}/{2}", INVENTORY_PATH, "a", "b.lsl");
|
||||||
|
tar.WriteFile(item1FileName, item1.
|
||||||
|
|
||||||
|
string part1Name = "object1";
|
||||||
|
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateCylinder();
|
||||||
|
Vector3 groupPosition = new Vector3(90, 80, 70);
|
||||||
|
Quaternion rotationOffset = new Quaternion(60, 70, 80, 90);
|
||||||
|
Vector3 offsetPosition = new Vector3(20, 25, 30);
|
||||||
|
|
||||||
|
SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
|
ArchiverModule archiverModule = new ArchiverModule();
|
||||||
|
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
|
SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
|
||||||
|
|
||||||
|
SceneObjectPart part1
|
||||||
|
= new SceneObjectPart(
|
||||||
|
UUID.Zero, shape, groupPosition, rotationOffset, offsetPosition);
|
||||||
|
part1.Name = part1Name;
|
||||||
|
SceneObjectGroup object1 = new SceneObjectGroup(part1);
|
||||||
|
scene.AddNewSceneObject(object1, false);
|
||||||
|
|
||||||
|
string object1FileName = string.Format(
|
||||||
|
"{0}_{1:000}-{2:000}-{3:000}__{4}.xml",
|
||||||
|
part1Name,
|
||||||
|
Math.Round(groupPosition.X), Math.Round(groupPosition.Y), Math.Round(groupPosition.Z),
|
||||||
|
part1.UUID);
|
||||||
|
tar.WriteFile(ArchiveConstants.OBJECTS_PATH + object1FileName, object1.ToXmlString2());
|
||||||
|
|
||||||
|
tar.Close();
|
||||||
|
|
||||||
|
MemoryStream archiveReadStream = new MemoryStream(archiveWriteStream.ToArray());
|
||||||
|
|
||||||
|
// SerialiserModule serialiserModule = new SerialiserModule();
|
||||||
|
// ArchiverModule archiverModule = new ArchiverModule();
|
||||||
|
|
||||||
|
// Scene scene = SceneSetupHelpers.SetupScene();
|
||||||
|
// SceneSetupHelpers.SetupSceneModules(scene, serialiserModule, archiverModule);
|
||||||
|
|
||||||
|
archiverModule.DearchiveRegion(archiveReadStream);
|
||||||
|
|
||||||
|
SceneObjectPart object1PartLoaded = scene.GetSceneObjectPart(part1Name);
|
||||||
|
|
||||||
|
Assert.That(object1PartLoaded, Is.Not.Null, "object1 was not loaded");
|
||||||
|
Assert.That(object1PartLoaded.Name, Is.EqualTo(part1Name), "object1 names not identical");
|
||||||
|
Assert.That(object1PartLoaded.GroupPosition, Is.EqualTo(groupPosition), "object1 group position not equal");
|
||||||
|
Assert.That(
|
||||||
|
object1PartLoaded.RotationOffset, Is.EqualTo(rotationOffset), "object1 rotation offset not equal");
|
||||||
|
Assert.That(
|
||||||
|
object1PartLoaded.OffsetPosition, Is.EqualTo(offsetPosition), "object1 offset position not equal");
|
||||||
|
|
||||||
|
// Temporary
|
||||||
|
Console.WriteLine("Successfully completed {0}", MethodBase.GetCurrentMethod());
|
||||||
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,7 +44,7 @@ using OpenSim.Tests.Common.Setup;
|
||||||
|
|
||||||
namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
namespace OpenSim.Region.CoreModules.World.Archiver.Tests
|
||||||
{
|
{
|
||||||
[TestFixture, LongRunning]
|
[TestFixture]
|
||||||
public class ArchiverTests
|
public class ArchiverTests
|
||||||
{
|
{
|
||||||
private Guid m_lastRequestId;
|
private Guid m_lastRequestId;
|
||||||
|
|
Loading…
Reference in New Issue