* 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 happens
0.6.1-post-fixes
Justin Clarke Casey 2008-11-21 18:17:01 +00:00
parent 82aa8e0327
commit e261c97470
3 changed files with 21 additions and 15 deletions

View File

@ -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)

View File

@ -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);
} }
} }
} }

View File

@ -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>