If an object has it's temporary flag unset after being set, put it back in the persistence list.
Effectively uses the patch in http://opensimulator.org/mantis/view.php?id=7060 But also adds a regression test and exposes the necessary property to allow this to work.0.8.0.3
parent
178a5a5585
commit
a5800f479e
|
@ -272,7 +272,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
private Vector3 lastPhysGroupPos;
|
private Vector3 lastPhysGroupPos;
|
||||||
private Quaternion lastPhysGroupRot;
|
private Quaternion lastPhysGroupRot;
|
||||||
|
|
||||||
private bool m_isBackedUp;
|
/// <summary>
|
||||||
|
/// Is this entity set to be saved in persistent storage?
|
||||||
|
/// </summary>
|
||||||
|
public bool Backup { get; private set; }
|
||||||
|
|
||||||
protected MapAndArray<UUID, SceneObjectPart> m_parts = new MapAndArray<UUID, SceneObjectPart>();
|
protected MapAndArray<UUID, SceneObjectPart> m_parts = new MapAndArray<UUID, SceneObjectPart>();
|
||||||
|
|
||||||
|
@ -882,10 +885,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
//m_log.DebugFormat(
|
//m_log.DebugFormat(
|
||||||
// "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID);
|
// "[SCENE OBJECT GROUP]: Attaching object {0} {1} to scene presistence sweep", Name, UUID);
|
||||||
|
|
||||||
if (!m_isBackedUp)
|
if (!Backup)
|
||||||
m_scene.EventManager.OnBackup += ProcessBackup;
|
m_scene.EventManager.OnBackup += ProcessBackup;
|
||||||
|
|
||||||
m_isBackedUp = true;
|
Backup = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1555,7 +1558,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="datastore"></param>
|
/// <param name="datastore"></param>
|
||||||
public virtual void ProcessBackup(ISimulationDataService datastore, bool forcedBackup)
|
public virtual void ProcessBackup(ISimulationDataService datastore, bool forcedBackup)
|
||||||
{
|
{
|
||||||
if (!m_isBackedUp)
|
if (!Backup)
|
||||||
{
|
{
|
||||||
// m_log.DebugFormat(
|
// m_log.DebugFormat(
|
||||||
// "[WATER WARS]: Ignoring backup of {0} {1} since object is not marked to be backed up", Name, UUID);
|
// "[WATER WARS]: Ignoring backup of {0} {1} since object is not marked to be backed up", Name, UUID);
|
||||||
|
@ -1677,7 +1680,7 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
public SceneObjectGroup Copy(bool userExposed)
|
public SceneObjectGroup Copy(bool userExposed)
|
||||||
{
|
{
|
||||||
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
SceneObjectGroup dupe = (SceneObjectGroup)MemberwiseClone();
|
||||||
dupe.m_isBackedUp = false;
|
dupe.Backup = false;
|
||||||
dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>();
|
dupe.m_parts = new MapAndArray<OpenMetaverse.UUID, SceneObjectPart>();
|
||||||
|
|
||||||
// Warning, The following code related to previousAttachmentStatus is needed so that clones of
|
// Warning, The following code related to previousAttachmentStatus is needed so that clones of
|
||||||
|
@ -2537,10 +2540,10 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
/// <param name="objectGroup"></param>
|
/// <param name="objectGroup"></param>
|
||||||
public virtual void DetachFromBackup()
|
public virtual void DetachFromBackup()
|
||||||
{
|
{
|
||||||
if (m_isBackedUp && Scene != null)
|
if (Backup && Scene != null)
|
||||||
m_scene.EventManager.OnBackup -= ProcessBackup;
|
m_scene.EventManager.OnBackup -= ProcessBackup;
|
||||||
|
|
||||||
m_isBackedUp = false;
|
Backup = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// This links an SOP from a previous linkset into my linkset.
|
// This links an SOP from a previous linkset into my linkset.
|
||||||
|
@ -2816,12 +2819,22 @@ namespace OpenSim.Region.Framework.Scenes
|
||||||
{
|
{
|
||||||
SceneObjectPart selectionPart = GetPart(localID);
|
SceneObjectPart selectionPart = GetPart(localID);
|
||||||
|
|
||||||
if (SetTemporary && Scene != null)
|
if (Scene != null)
|
||||||
|
{
|
||||||
|
if (SetTemporary)
|
||||||
{
|
{
|
||||||
DetachFromBackup();
|
DetachFromBackup();
|
||||||
// Remove from database and parcel prim count
|
// Remove from database and parcel prim count
|
||||||
//
|
//
|
||||||
m_scene.DeleteFromStorage(UUID);
|
m_scene.DeleteFromStorage(UUID);
|
||||||
|
}
|
||||||
|
else if (!Backup)
|
||||||
|
{
|
||||||
|
// Previously been temporary now switching back so make it
|
||||||
|
// available for persisting again
|
||||||
|
AttachToBackup();
|
||||||
|
}
|
||||||
|
|
||||||
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
m_scene.EventManager.TriggerParcelPrimCountTainted();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -57,6 +57,25 @@ namespace OpenSim.Region.Framework.Scenes.Tests
|
||||||
m_so2 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so2", 0x20);
|
m_so2 = SceneHelpers.CreateSceneObject(1, m_ownerId, "so2", 0x20);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestSetTemporary()
|
||||||
|
{
|
||||||
|
TestHelpers.InMethod();
|
||||||
|
|
||||||
|
m_scene.AddSceneObject(m_so1);
|
||||||
|
m_so1.ScriptSetTemporaryStatus(true);
|
||||||
|
|
||||||
|
// Is this really the correct flag?
|
||||||
|
Assert.That(m_so1.RootPart.Flags, Is.EqualTo(PrimFlags.TemporaryOnRez));
|
||||||
|
Assert.That(m_so1.Backup, Is.False);
|
||||||
|
|
||||||
|
// Test setting back to non-temporary
|
||||||
|
m_so1.ScriptSetTemporaryStatus(false);
|
||||||
|
|
||||||
|
Assert.That(m_so1.RootPart.Flags, Is.EqualTo(PrimFlags.None));
|
||||||
|
Assert.That(m_so1.Backup, Is.True);
|
||||||
|
}
|
||||||
|
|
||||||
[Test]
|
[Test]
|
||||||
public void TestSetPhantomSinglePrim()
|
public void TestSetPhantomSinglePrim()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue