aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs118
1 files changed, 104 insertions, 14 deletions
diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
index 1be6386..8a8e392 100644
--- a/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
+++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiverModule.cs
@@ -38,6 +38,8 @@ using OpenSim.Framework.Console;
38using OpenSim.Region.Framework.Interfaces; 38using OpenSim.Region.Framework.Interfaces;
39using OpenSim.Region.Framework.Scenes; 39using OpenSim.Region.Framework.Scenes;
40 40
41using OpenMetaverse;
42
41namespace OpenSim.Region.CoreModules.World.Archiver 43namespace OpenSim.Region.CoreModules.World.Archiver
42{ 44{
43 /// <summary> 45 /// <summary>
@@ -101,9 +103,64 @@ namespace OpenSim.Region.CoreModules.World.Archiver
101 { 103 {
102 bool mergeOar = false; 104 bool mergeOar = false;
103 bool skipAssets = false; 105 bool skipAssets = false;
104 106 bool forceTerrain = false;
105 OptionSet options = new OptionSet().Add("m|merge", delegate (string v) { mergeOar = v != null; }); 107 bool forceParcels = false;
106 options.Add("s|skip-assets", delegate (string v) { skipAssets = v != null; }); 108 bool noObjects = false;
109 Vector3 displacement = new Vector3(0f, 0f, 0f);
110 String defaultUser = "";
111 float rotation = 0f;
112 Vector3 rotationCenter = new Vector3(Constants.RegionSize / 2f, Constants.RegionSize / 2f, 0);
113
114 OptionSet options = new OptionSet();
115 options.Add("m|merge", delegate(string v) { mergeOar = (v != null); });
116 options.Add("s|skip-assets", delegate(string v) { skipAssets = (v != null); });
117 options.Add("force-terrain", delegate(string v) { forceTerrain = (v != null); });
118 options.Add("forceterrain", delegate(string v) { forceTerrain = (v != null); }); // downward compatibility
119 options.Add("force-parcels", delegate(string v) { forceParcels = (v != null); });
120 options.Add("forceparcels", delegate(string v) { forceParcels = (v != null); }); // downward compatibility
121 options.Add("no-objects", delegate(string v) { noObjects = (v != null); });
122 options.Add("default-user=", delegate(string v) { defaultUser = (v == null) ? "" : v; });
123 options.Add("displacement=", delegate(string v)
124 {
125 try
126 {
127 displacement = v == null ? Vector3.Zero : Vector3.Parse(v);
128 }
129 catch
130 {
131 m_log.ErrorFormat("[ARCHIVER MODULE] failure parsing displacement");
132 m_log.ErrorFormat("[ARCHIVER MODULE] Must be represented as vector3: --displacement \"<128,128,0>\"");
133 return;
134 }
135 });
136 options.Add("rotation=", delegate(string v)
137 {
138 try
139 {
140 rotation = v == null ? 0f : float.Parse(v);
141 }
142 catch
143 {
144 m_log.ErrorFormat("[ARCHIVER MODULE] failure parsing rotation");
145 m_log.ErrorFormat("[ARCHIVER MODULE] Must be an angle in degrees between -360 and +360: --rotation 45");
146 return;
147 }
148 // Convert to radians for internals
149 rotation = Util.Clamp<float>(rotation, -359f, 359f) / 180f * (float)Math.PI;
150 });
151 options.Add("rotation-center=", delegate(string v)
152 {
153 try
154 {
155 rotationCenter = v == null ? Vector3.Zero : Vector3.Parse(v);
156 }
157 catch
158 {
159 m_log.ErrorFormat("[ARCHIVER MODULE] failure parsing rotation displacement");
160 m_log.ErrorFormat("[ARCHIVER MODULE] Must be represented as vector3: --rotation-center \"<128,128,0>\"");
161 return;
162 }
163 });
107 164
108 // Send a message to the region ready module 165 // Send a message to the region ready module
109 /* bluewall* Disable this for the time being 166 /* bluewall* Disable this for the time being
@@ -122,13 +179,44 @@ namespace OpenSim.Region.CoreModules.World.Archiver
122// foreach (string param in mainParams) 179// foreach (string param in mainParams)
123// m_log.DebugFormat("GOT PARAM [{0}]", param); 180// m_log.DebugFormat("GOT PARAM [{0}]", param);
124 181
182 Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
183 if (mergeOar) archiveOptions.Add("merge", null);
184 if (skipAssets) archiveOptions.Add("skipAssets", null);
185 if (forceTerrain) archiveOptions.Add("force-terrain", null);
186 if (forceParcels) archiveOptions.Add("force-parcels", null);
187 if (noObjects) archiveOptions.Add("no-objects", null);
188 if (defaultUser != "")
189 {
190 UUID defaultUserUUID = UUID.Zero;
191 try
192 {
193 defaultUserUUID = Scene.UserManagementModule.GetUserIdByName(defaultUser);
194 }
195 catch
196 {
197 m_log.ErrorFormat("[ARCHIVER MODULE] default user must be in format \"First Last\"", defaultUser);
198 }
199 if (defaultUserUUID == UUID.Zero)
200 {
201 m_log.ErrorFormat("[ARCHIVER MODULE] cannot find specified default user {0}", defaultUser);
202 return;
203 }
204 else
205 {
206 archiveOptions.Add("default-user", defaultUserUUID);
207 }
208 }
209 archiveOptions.Add("displacement", displacement);
210 archiveOptions.Add("rotation", rotation);
211 archiveOptions.Add("rotation-center", rotationCenter);
212
125 if (mainParams.Count > 2) 213 if (mainParams.Count > 2)
126 { 214 {
127 DearchiveRegion(mainParams[2], mergeOar, skipAssets, Guid.Empty); 215 DearchiveRegion(mainParams[2], Guid.Empty, archiveOptions);
128 } 216 }
129 else 217 else
130 { 218 {
131 DearchiveRegion(DEFAULT_OAR_BACKUP_FILENAME, mergeOar, skipAssets, Guid.Empty); 219 DearchiveRegion(DEFAULT_OAR_BACKUP_FILENAME, Guid.Empty, archiveOptions);
132 } 220 }
133 } 221 }
134 222
@@ -198,25 +286,27 @@ namespace OpenSim.Region.CoreModules.World.Archiver
198 286
199 public void DearchiveRegion(string loadPath) 287 public void DearchiveRegion(string loadPath)
200 { 288 {
201 DearchiveRegion(loadPath, false, false, Guid.Empty); 289 Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
290 DearchiveRegion(loadPath, Guid.Empty, archiveOptions);
202 } 291 }
203 292
204 public void DearchiveRegion(string loadPath, bool merge, bool skipAssets, Guid requestId) 293 public void DearchiveRegion(string loadPath, Guid requestId, Dictionary<string, object> options)
205 { 294 {
206 m_log.InfoFormat( 295 m_log.InfoFormat(
207 "[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath); 296 "[ARCHIVER]: Loading archive to region {0} from {1}", Scene.RegionInfo.RegionName, loadPath);
208 297
209 new ArchiveReadRequest(Scene, loadPath, merge, skipAssets, requestId).DearchiveRegion(); 298 new ArchiveReadRequest(Scene, loadPath, requestId, options).DearchiveRegion();
210 } 299 }
211 300
212 public void DearchiveRegion(Stream loadStream) 301 public void DearchiveRegion(Stream loadStream)
213 { 302 {
214 DearchiveRegion(loadStream, false, false, Guid.Empty); 303 Dictionary<string, object> archiveOptions = new Dictionary<string, object>();
304 DearchiveRegion(loadStream, Guid.Empty, archiveOptions);
215 } 305 }
216 306
217 public void DearchiveRegion(Stream loadStream, bool merge, bool skipAssets, Guid requestId) 307 public void DearchiveRegion(Stream loadStream, Guid requestId, Dictionary<string, object> options)
218 { 308 {
219 new ArchiveReadRequest(Scene, loadStream, merge, skipAssets, requestId).DearchiveRegion(); 309 new ArchiveReadRequest(Scene, loadStream, requestId, options).DearchiveRegion();
220 } 310 }
221 } 311 }
222} 312}