diff options
Diffstat (limited to '')
3 files changed, 77 insertions, 18 deletions
diff --git a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs index 3fafc47..ed93916 100644 --- a/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs +++ b/OpenSim/Region/Framework/Interfaces/IRegionArchiverModule.cs | |||
@@ -29,6 +29,8 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.IO; | 30 | using System.IO; |
31 | 31 | ||
32 | using OpenMetaverse; | ||
33 | |||
32 | namespace OpenSim.Region.Framework.Interfaces | 34 | namespace OpenSim.Region.Framework.Interfaces |
33 | { | 35 | { |
34 | /// <summary> | 36 | /// <summary> |
@@ -100,16 +102,11 @@ namespace OpenSim.Region.Framework.Interfaces | |||
100 | /// If you want notification of when it has completed then subscribe to the EventManager.OnOarFileLoaded event. | 102 | /// If you want notification of when it has completed then subscribe to the EventManager.OnOarFileLoaded event. |
101 | /// | 103 | /// |
102 | /// <param name="loadPath"></param> | 104 | /// <param name="loadPath"></param> |
103 | /// <param name="merge"> | ||
104 | /// If true, the loaded region merges with the existing one rather than replacing it. Any terrain or region | ||
105 | /// settings in the archive will be ignored. | ||
106 | /// </param> | ||
107 | /// <param name="skipAssets"> | ||
108 | /// If true, the archive is loaded without loading any assets contained within it. This is useful if the | ||
109 | /// assets are already known to be present in the grid's asset service. | ||
110 | /// </param> | ||
111 | /// <param name="requestId">If supplied, this request Id is later returned in the saved event</param> | 105 | /// <param name="requestId">If supplied, this request Id is later returned in the saved event</param> |
112 | void DearchiveRegion(string loadPath, bool merge, bool skipAssets, Guid requestId); | 106 | /// <param name="options"> |
107 | /// Dictionary of options. | ||
108 | /// </param> | ||
109 | void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string,object> options); | ||
113 | 110 | ||
114 | /// <summary> | 111 | /// <summary> |
115 | /// Dearchive a region from a stream. This replaces the existing scene. | 112 | /// Dearchive a region from a stream. This replaces the existing scene. |
@@ -127,15 +124,10 @@ namespace OpenSim.Region.Framework.Interfaces | |||
127 | /// If you want notification of when it has completed then subscribe to the EventManager.OnOarFileLoaded event. | 124 | /// If you want notification of when it has completed then subscribe to the EventManager.OnOarFileLoaded event. |
128 | /// | 125 | /// |
129 | /// <param name="loadStream"></param> | 126 | /// <param name="loadStream"></param> |
130 | /// <param name="merge"> | ||
131 | /// If true, the loaded region merges with the existing one rather than replacing it. Any terrain or region | ||
132 | /// settings in the archive will be ignored. | ||
133 | /// </param> | ||
134 | /// <param name="skipAssets"> | ||
135 | /// If true, the archive is loaded without loading any assets contained within it. This is useful if the | ||
136 | /// assets are already known to be present in the grid's asset service. | ||
137 | /// </param | ||
138 | /// <param name="requestId">If supplied, this request Id is later returned in the saved event</param> | 127 | /// <param name="requestId">If supplied, this request Id is later returned in the saved event</param> |
139 | void DearchiveRegion(Stream loadStream, bool merge, bool skipAssets, Guid requestId); | 128 | /// <param name="options"> |
129 | /// Dictionary of options. | ||
130 | /// </param> | ||
131 | void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options); | ||
140 | } | 132 | } |
141 | } | 133 | } |
diff --git a/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs b/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs index 4e2f4e1..595e031 100644 --- a/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs +++ b/OpenSim/Region/Framework/Interfaces/ITerrainModule.cs | |||
@@ -59,6 +59,8 @@ namespace OpenSim.Region.Framework.Interfaces | |||
59 | /// <param name="stream"></param> | 59 | /// <param name="stream"></param> |
60 | void LoadFromStream(string filename, Stream stream); | 60 | void LoadFromStream(string filename, Stream stream); |
61 | void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap); | 61 | void LoadFromStream(string filename, System.Uri pathToTerrainHeightmap); |
62 | void LoadFromStream(string filename, Vector3 displacement, | ||
63 | float radianRotation, Vector2 rotationDisplacement, Stream stream); | ||
62 | /// <summary> | 64 | /// <summary> |
63 | /// Save a terrain to a stream. | 65 | /// Save a terrain to a stream. |
64 | /// </summary> | 66 | /// </summary> |
diff --git a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs index 40e88f1..3d14943 100644 --- a/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs +++ b/OpenSim/Region/Framework/Scenes/Serialization/SceneObjectSerializer.cs | |||
@@ -299,6 +299,71 @@ namespace OpenSim.Region.Framework.Scenes.Serialization | |||
299 | } | 299 | } |
300 | } | 300 | } |
301 | 301 | ||
302 | /// <summary> | ||
303 | /// Modifies a SceneObjectGroup. | ||
304 | /// </summary> | ||
305 | /// <param name="sog">The object</param> | ||
306 | /// <returns>Whether the object was actually modified</returns> | ||
307 | public delegate bool SceneObjectModifier(SceneObjectGroup sog); | ||
308 | |||
309 | /// <summary> | ||
310 | /// Modifies an object by deserializing it; applying 'modifier' to each SceneObjectGroup; and reserializing. | ||
311 | /// </summary> | ||
312 | /// <param name="assetId">The object's UUID</param> | ||
313 | /// <param name="data">Serialized data</param> | ||
314 | /// <param name="modifier">The function to run on each SceneObjectGroup</param> | ||
315 | /// <returns>The new serialized object's data, or null if an error occurred</returns> | ||
316 | public static byte[] ModifySerializedObject(UUID assetId, byte[] data, SceneObjectModifier modifier) | ||
317 | { | ||
318 | List<SceneObjectGroup> sceneObjects = new List<SceneObjectGroup>(); | ||
319 | CoalescedSceneObjects coa = null; | ||
320 | |||
321 | string xmlData = ExternalRepresentationUtils.SanitizeXml(Utils.BytesToString(data)); | ||
322 | |||
323 | if (CoalescedSceneObjectsSerializer.TryFromXml(xmlData, out coa)) | ||
324 | { | ||
325 | // m_log.DebugFormat("[SERIALIZER]: Loaded coalescence {0} has {1} objects", assetId, coa.Count); | ||
326 | |||
327 | if (coa.Objects.Count == 0) | ||
328 | { | ||
329 | m_log.WarnFormat("[SERIALIZER]: Aborting load of coalesced object from asset {0} as it has zero loaded components", assetId); | ||
330 | return null; | ||
331 | } | ||
332 | |||
333 | sceneObjects.AddRange(coa.Objects); | ||
334 | } | ||
335 | else | ||
336 | { | ||
337 | SceneObjectGroup deserializedObject = FromOriginalXmlFormat(xmlData); | ||
338 | |||
339 | if (deserializedObject != null) | ||
340 | { | ||
341 | sceneObjects.Add(deserializedObject); | ||
342 | } | ||
343 | else | ||
344 | { | ||
345 | m_log.WarnFormat("[SERIALIZER]: Aborting load of object from asset {0} as deserialization failed", assetId); | ||
346 | return null; | ||
347 | } | ||
348 | } | ||
349 | |||
350 | bool modified = false; | ||
351 | foreach (SceneObjectGroup sog in sceneObjects) | ||
352 | { | ||
353 | if (modifier(sog)) | ||
354 | modified = true; | ||
355 | } | ||
356 | |||
357 | if (modified) | ||
358 | { | ||
359 | if (coa != null) | ||
360 | data = Utils.StringToBytes(CoalescedSceneObjectsSerializer.ToXml(coa)); | ||
361 | else | ||
362 | data = Utils.StringToBytes(ToOriginalXmlFormat(sceneObjects[0])); | ||
363 | } | ||
364 | |||
365 | return data; | ||
366 | } | ||
302 | 367 | ||
303 | #region manual serialization | 368 | #region manual serialization |
304 | 369 | ||