* On delete to inventory, actually remove the group from the scene before the async stage.
* Last time I accidentally left the existing code in place that merely wiped the group from the client (but not the scene) * Put in an incomplete 'delete object o inventory' test to assert that this happens0.6.1-post-fixes
parent
82aa8e0327
commit
e261c97470
|
@ -42,7 +42,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
public IClientAPI remoteClient;
|
public IClientAPI remoteClient;
|
||||||
public SceneObjectGroup objectGroup;
|
public SceneObjectGroup objectGroup;
|
||||||
public UUID folderID;
|
public UUID folderID;
|
||||||
public bool permissionToDelete;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -88,7 +87,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
dtis.folderID = folderID;
|
dtis.folderID = folderID;
|
||||||
dtis.objectGroup = objectGroup;
|
dtis.objectGroup = objectGroup;
|
||||||
dtis.remoteClient = remoteClient;
|
dtis.remoteClient = remoteClient;
|
||||||
dtis.permissionToDelete = permissionToDelete;
|
|
||||||
|
|
||||||
m_inventoryDeletes.Enqueue(dtis);
|
m_inventoryDeletes.Enqueue(dtis);
|
||||||
}
|
}
|
||||||
|
@ -96,9 +94,8 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
if (Enabled)
|
if (Enabled)
|
||||||
m_inventoryTicker.Start();
|
m_inventoryTicker.Start();
|
||||||
|
|
||||||
// Visually remove it, even if it isnt really gone yet.
|
|
||||||
if (permissionToDelete)
|
if (permissionToDelete)
|
||||||
objectGroup.DeleteGroup(false);
|
m_scene.DeleteSceneObject(objectGroup, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void InventoryRunDeleteTimer(object sender, ElapsedEventArgs e)
|
private void InventoryRunDeleteTimer(object sender, ElapsedEventArgs e)
|
||||||
|
@ -129,8 +126,6 @@ namespace OpenSim.Region.Environment.Scenes
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (x.permissionToDelete)
|
|
||||||
m_scene.DeleteSceneObject(x.objectGroup, false);
|
|
||||||
m_scene.DeleteToInventory(x.destination, x.folderID, x.objectGroup, x.remoteClient);
|
m_scene.DeleteToInventory(x.destination, x.folderID, x.objectGroup, x.remoteClient);
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
|
|
@ -70,27 +70,35 @@ namespace OpenSim.Region.Environment.Scenes.Tests
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test removing an object from a scene.
|
/// Test deleting an object from a scene.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Test]
|
[Test]
|
||||||
public void TestRemoveSceneObject()
|
public void TestDeleteSceneObject()
|
||||||
{
|
{
|
||||||
TestScene scene = SceneTestUtils.SetupScene();
|
TestScene scene = SceneTestUtils.SetupScene();
|
||||||
SceneObjectPart part = SceneTestUtils.AddSceneObject(scene);
|
SceneObjectPart part = SceneTestUtils.AddSceneObject(scene);
|
||||||
scene.DeleteSceneObject(part.ParentGroup, false);
|
scene.DeleteSceneObject(part.ParentGroup, false);
|
||||||
|
|
||||||
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
||||||
|
|
||||||
Assert.That(retrievedPart, Is.Null);
|
Assert.That(retrievedPart, Is.Null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Test removing an object
|
/// Test deleting an object to user inventory
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public void TestRemoveSceneObjectAsync()
|
[Test]
|
||||||
|
public void TestDeleteSceneObjectToUserInventory()
|
||||||
{
|
{
|
||||||
|
UUID agentId = UUID.Parse("00000000-0000-0000-0000-000000000001");
|
||||||
|
|
||||||
TestScene scene = SceneTestUtils.SetupScene();
|
TestScene scene = SceneTestUtils.SetupScene();
|
||||||
SceneObjectPart part = SceneTestUtils.AddSceneObject(scene);
|
SceneObjectPart part = SceneTestUtils.AddSceneObject(scene);
|
||||||
|
|
||||||
|
IClientAPI client = SceneTestUtils.AddRootAgent(scene, agentId);
|
||||||
|
scene.DeRezObject(client, part.LocalId, UUID.Zero, 9, UUID.Zero);
|
||||||
|
|
||||||
|
SceneObjectPart retrievedPart = scene.GetSceneObjectPart(part.LocalId);
|
||||||
|
Assert.That(retrievedPart, Is.Null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -75,7 +75,7 @@ namespace OpenSim.Region.Environment.Scenes.Tests
|
||||||
/// <param name="scene"></param>
|
/// <param name="scene"></param>
|
||||||
/// <param name="agentId"></param>
|
/// <param name="agentId"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static void AddRootAgent(Scene scene, UUID agentId)
|
public static IClientAPI AddRootAgent(Scene scene, UUID agentId)
|
||||||
{
|
{
|
||||||
string firstName = "testfirstname";
|
string firstName = "testfirstname";
|
||||||
|
|
||||||
|
@ -92,7 +92,10 @@ namespace OpenSim.Region.Environment.Scenes.Tests
|
||||||
agent.CapsPath = "http://wibble.com";
|
agent.CapsPath = "http://wibble.com";
|
||||||
|
|
||||||
scene.NewUserConnection(agent);
|
scene.NewUserConnection(agent);
|
||||||
scene.AddNewClient(new TestClient(agent), false);
|
IClientAPI client = new TestClient(agent);
|
||||||
|
scene.AddNewClient(client, false);
|
||||||
|
|
||||||
|
return client;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
Loading…
Reference in New Issue