Fix obvious bug in XInventoryService.GetFolderItems() which was preventing the iar module from being able to save single item iars
parent
86f3f83250
commit
71433075a9
|
@ -206,11 +206,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
|
||||||
|
|
||||||
if (components.Length == 1)
|
if (components.Length == 1)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat("FOUND SINGLE COMPONENT [{0}]", components[0]);
|
// m_log.DebugFormat(
|
||||||
|
// "FOUND SINGLE COMPONENT [{0}]. Looking for this in [{1}] {2}",
|
||||||
|
// components[0], startFolder.Name, startFolder.ID);
|
||||||
|
|
||||||
List<InventoryItemBase> items = inventoryService.GetFolderItems(startFolder.Owner, startFolder.ID);
|
List<InventoryItemBase> items = inventoryService.GetFolderItems(startFolder.Owner, startFolder.ID);
|
||||||
|
|
||||||
|
// m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Found {0} items in FindItemByPath()", items.Count);
|
||||||
|
|
||||||
foreach (InventoryItemBase item in items)
|
foreach (InventoryItemBase item in items)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Inspecting item {0} {1}", item.Name, item.ID);
|
||||||
|
|
||||||
if (item.Name == components[0])
|
if (item.Name == components[0])
|
||||||
return item;
|
return item;
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,13 +63,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test saving a V0.1 OpenSim Inventory Archive (subject to change since there is no fixed format yet).
|
/// Test saving an inventory path to a V0.1 OpenSim Inventory Archive
|
||||||
|
/// (subject to change since there is no fixed format yet).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
// Commenting for now! The mock inventory service needs more beef, at least for
|
|
||||||
// GetFolderForType
|
|
||||||
// REFACTORING PROBLEM. This needs to be rewritten.
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSaveIarV0_1()
|
public void TestSavePathToIarV0_1()
|
||||||
{
|
{
|
||||||
TestHelper.InMethod();
|
TestHelper.InMethod();
|
||||||
// log4net.Config.XmlConfigurator.Configure();
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
@ -174,6 +172,123 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver.Tests
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Assert.That(gotControlFile, Is.True, "No control file in archive");
|
||||||
|
Assert.That(gotObject1File, Is.True, "No item1 file in archive");
|
||||||
|
// Assert.That(gotObject2File, Is.True, "No object2 file in archive");
|
||||||
|
|
||||||
|
// TODO: Test presence of more files and contents of files.
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Test saving a single inventory item to a V0.1 OpenSim Inventory Archive
|
||||||
|
/// (subject to change since there is no fixed format yet).
|
||||||
|
/// </summary>
|
||||||
|
[Test]
|
||||||
|
public void TestSaveItemToIarV0_1()
|
||||||
|
{
|
||||||
|
TestHelper.InMethod();
|
||||||
|
// log4net.Config.XmlConfigurator.Configure();
|
||||||
|
|
||||||
|
InventoryArchiverModule archiverModule = new InventoryArchiverModule(true);
|
||||||
|
|
||||||
|
Scene scene = SceneSetupHelpers.SetupScene("Inventory");
|
||||||
|
SceneSetupHelpers.SetupSceneModules(scene, archiverModule);
|
||||||
|
|
||||||
|
// Create user
|
||||||
|
string userFirstName = "Jock";
|
||||||
|
string userLastName = "Stirrup";
|
||||||
|
string userPassword = "troll";
|
||||||
|
UUID userId = UUID.Parse("00000000-0000-0000-0000-000000000020");
|
||||||
|
UserProfileTestUtils.CreateUserWithInventory(scene, userFirstName, userLastName, userId, userPassword);
|
||||||
|
|
||||||
|
// Create asset
|
||||||
|
SceneObjectGroup object1;
|
||||||
|
SceneObjectPart part1;
|
||||||
|
{
|
||||||
|
string partName = "My Little Dog Object";
|
||||||
|
UUID ownerId = UUID.Parse("00000000-0000-0000-0000-000000000040");
|
||||||
|
PrimitiveBaseShape shape = PrimitiveBaseShape.CreateSphere();
|
||||||
|
Vector3 groupPosition = new Vector3(10, 20, 30);
|
||||||
|
Quaternion rotationOffset = new Quaternion(20, 30, 40, 50);
|
||||||
|
Vector3 offsetPosition = new Vector3(5, 10, 15);
|
||||||
|
|
||||||
|
part1
|
||||||
|
= new SceneObjectPart(
|
||||||
|
ownerId, shape, groupPosition, rotationOffset, offsetPosition);
|
||||||
|
part1.Name = partName;
|
||||||
|
|
||||||
|
object1 = new SceneObjectGroup(part1);
|
||||||
|
scene.AddNewSceneObject(object1, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
UUID asset1Id = UUID.Parse("00000000-0000-0000-0000-000000000060");
|
||||||
|
AssetBase asset1 = AssetHelpers.CreateAsset(asset1Id, object1);
|
||||||
|
scene.AssetService.Store(asset1);
|
||||||
|
|
||||||
|
// Create item
|
||||||
|
UUID item1Id = UUID.Parse("00000000-0000-0000-0000-000000000080");
|
||||||
|
string item1Name = "My Little Dog";
|
||||||
|
InventoryItemBase item1 = new InventoryItemBase();
|
||||||
|
item1.Name = item1Name;
|
||||||
|
item1.AssetID = asset1.FullID;
|
||||||
|
item1.ID = item1Id;
|
||||||
|
InventoryFolderBase objsFolder
|
||||||
|
= InventoryArchiveUtils.FindFolderByPath(scene.InventoryService, userId, "Objects")[0];
|
||||||
|
item1.Folder = objsFolder.ID;
|
||||||
|
scene.AddInventoryItem(userId, item1);
|
||||||
|
|
||||||
|
MemoryStream archiveWriteStream = new MemoryStream();
|
||||||
|
archiverModule.OnInventoryArchiveSaved += SaveCompleted;
|
||||||
|
|
||||||
|
mre.Reset();
|
||||||
|
archiverModule.ArchiveInventory(
|
||||||
|
Guid.NewGuid(), userFirstName, userLastName, "Objects/" + item1Name, userPassword, archiveWriteStream);
|
||||||
|
mre.WaitOne(60000, false);
|
||||||
|
|
||||||
|
byte[] archive = archiveWriteStream.ToArray();
|
||||||
|
MemoryStream archiveReadStream = new MemoryStream(archive);
|
||||||
|
TarArchiveReader tar = new TarArchiveReader(archiveReadStream);
|
||||||
|
|
||||||
|
//bool gotControlFile = false;
|
||||||
|
bool gotObject1File = false;
|
||||||
|
//bool gotObject2File = false;
|
||||||
|
string expectedObject1FileName = InventoryArchiveWriteRequest.CreateArchiveItemName(item1);
|
||||||
|
string expectedObject1FilePath = string.Format(
|
||||||
|
"{0}{1}",
|
||||||
|
ArchiveConstants.INVENTORY_PATH,
|
||||||
|
expectedObject1FileName);
|
||||||
|
|
||||||
|
string filePath;
|
||||||
|
TarArchiveReader.TarEntryType tarEntryType;
|
||||||
|
|
||||||
|
// Console.WriteLine("Reading archive");
|
||||||
|
|
||||||
|
while (tar.ReadEntry(out filePath, out tarEntryType) != null)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Got {0}", filePath);
|
||||||
|
|
||||||
|
// if (ArchiveConstants.CONTROL_FILE_PATH == filePath)
|
||||||
|
// {
|
||||||
|
// gotControlFile = true;
|
||||||
|
// }
|
||||||
|
|
||||||
|
if (filePath.StartsWith(ArchiveConstants.INVENTORY_PATH) && filePath.EndsWith(".xml"))
|
||||||
|
{
|
||||||
|
// string fileName = filePath.Remove(0, "Objects/".Length);
|
||||||
|
//
|
||||||
|
// if (fileName.StartsWith(part1.Name))
|
||||||
|
// {
|
||||||
|
Assert.That(expectedObject1FilePath, Is.EqualTo(filePath));
|
||||||
|
gotObject1File = true;
|
||||||
|
// }
|
||||||
|
// else if (fileName.StartsWith(part2.Name))
|
||||||
|
// {
|
||||||
|
// Assert.That(fileName, Is.EqualTo(expectedObject2FileName));
|
||||||
|
// gotObject2File = true;
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Assert.That(gotControlFile, Is.True, "No control file in archive");
|
// Assert.That(gotControlFile, Is.True, "No control file in archive");
|
||||||
Assert.That(gotObject1File, Is.True, "No item1 file in archive");
|
Assert.That(gotObject1File, Is.True, "No item1 file in archive");
|
||||||
// Assert.That(gotObject2File, Is.True, "No object2 file in archive");
|
// Assert.That(gotObject2File, Is.True, "No object2 file in archive");
|
||||||
|
|
|
@ -259,13 +259,15 @@ namespace OpenSim.Services.InventoryService
|
||||||
|
|
||||||
public virtual List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID)
|
public virtual List<InventoryItemBase> GetFolderItems(UUID principalID, UUID folderID)
|
||||||
{
|
{
|
||||||
|
// m_log.DebugFormat("[XINVENTORY]: Fetch items for folder {0}", folderID);
|
||||||
|
|
||||||
// Since we probably don't get a valid principal here, either ...
|
// Since we probably don't get a valid principal here, either ...
|
||||||
//
|
//
|
||||||
List<InventoryItemBase> invItems = new List<InventoryItemBase>();
|
List<InventoryItemBase> invItems = new List<InventoryItemBase>();
|
||||||
|
|
||||||
XInventoryItem[] items = m_Database.GetItems(
|
XInventoryItem[] items = m_Database.GetItems(
|
||||||
new string[] { "parentFolderID"},
|
new string[] { "parentFolderID" },
|
||||||
new string[] { UUID.Zero.ToString() });
|
new string[] { folderID.ToString() });
|
||||||
|
|
||||||
foreach (XInventoryItem i in items)
|
foreach (XInventoryItem i in items)
|
||||||
invItems.Add(ConvertToOpenSim(i));
|
invItems.Add(ConvertToOpenSim(i));
|
||||||
|
|
Loading…
Reference in New Issue