diff options
author | BlueWall | 2011-03-21 22:06:43 -0400 |
---|---|---|
committer | BlueWall | 2011-03-21 22:06:43 -0400 |
commit | e3c327a305dcf795f372b940f34538a19bf92218 (patch) | |
tree | b034355a12c4d87410809aa19bf6015e611e1e22 /OpenSim/Region/CoreModules/World/Media | |
parent | Merge branch 'master' of /home/opensim/src/OpenSim/Core (diff) | |
parent | Thanks Kevin Cozens for a patch that: (diff) | |
download | opensim-SC_OLD-e3c327a305dcf795f372b940f34538a19bf92218.zip opensim-SC_OLD-e3c327a305dcf795f372b940f34538a19bf92218.tar.gz opensim-SC_OLD-e3c327a305dcf795f372b940f34538a19bf92218.tar.bz2 opensim-SC_OLD-e3c327a305dcf795f372b940f34538a19bf92218.tar.xz |
Merge branch 'master' of /home/opensim/src/OpenSim/Core
Diffstat (limited to 'OpenSim/Region/CoreModules/World/Media')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs | 60 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Media/Moap/Tests/MoapTests.cs | 102 |
2 files changed, 150 insertions, 12 deletions
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs index 7c5d044..898ca4a 100644 --- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs +++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs | |||
@@ -50,7 +50,7 @@ using Caps = OpenSim.Framework.Capabilities.Caps; | |||
50 | using OSDArray = OpenMetaverse.StructuredData.OSDArray; | 50 | using OSDArray = OpenMetaverse.StructuredData.OSDArray; |
51 | using OSDMap = OpenMetaverse.StructuredData.OSDMap; | 51 | using OSDMap = OpenMetaverse.StructuredData.OSDMap; |
52 | 52 | ||
53 | namespace OpenSim.Region.CoreModules.Media.Moap | 53 | namespace OpenSim.Region.CoreModules.World.Media.Moap |
54 | { | 54 | { |
55 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MoapModule")] | 55 | [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "MoapModule")] |
56 | public class MoapModule : INonSharedRegionModule, IMoapModule | 56 | public class MoapModule : INonSharedRegionModule, IMoapModule |
@@ -225,24 +225,62 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
225 | return me; | 225 | return me; |
226 | } | 226 | } |
227 | 227 | ||
228 | /// <summary> | ||
229 | /// Set the media entry on the face of the given part. | ||
230 | /// </summary> | ||
231 | /// <param name="part">/param> | ||
232 | /// <param name="face"></param> | ||
233 | /// <param name="me">If null, then the media entry is cleared.</param> | ||
228 | public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me) | 234 | public void SetMediaEntry(SceneObjectPart part, int face, MediaEntry me) |
229 | { | 235 | { |
236 | // m_log.DebugFormat("[MOAP]: SetMediaEntry for {0}, face {1}", part.Name, face); | ||
237 | |||
230 | CheckFaceParam(part, face); | 238 | CheckFaceParam(part, face); |
231 | 239 | ||
232 | if (null == part.Shape.Media) | 240 | if (null == part.Shape.Media) |
233 | part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]); | 241 | { |
234 | 242 | if (me == null) | |
243 | return; | ||
244 | else | ||
245 | part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]); | ||
246 | } | ||
247 | |||
235 | lock (part.Shape.Media) | 248 | lock (part.Shape.Media) |
236 | part.Shape.Media[face] = me; | 249 | part.Shape.Media[face] = me; |
237 | 250 | ||
238 | UpdateMediaUrl(part, UUID.Zero); | 251 | UpdateMediaUrl(part, UUID.Zero); |
252 | |||
253 | SetPartMediaFlags(part, face, me != null); | ||
254 | |||
239 | part.ScheduleFullUpdate(); | 255 | part.ScheduleFullUpdate(); |
240 | part.TriggerScriptChangedEvent(Changed.MEDIA); | 256 | part.TriggerScriptChangedEvent(Changed.MEDIA); |
241 | } | 257 | } |
242 | 258 | ||
259 | /// <summary> | ||
260 | /// Clear the media entry from the face of the given part. | ||
261 | /// </summary> | ||
262 | /// <param name="part"></param> | ||
263 | /// <param name="face"></param> | ||
243 | public void ClearMediaEntry(SceneObjectPart part, int face) | 264 | public void ClearMediaEntry(SceneObjectPart part, int face) |
244 | { | 265 | { |
245 | SetMediaEntry(part, face, null); | 266 | SetMediaEntry(part, face, null); |
267 | } | ||
268 | |||
269 | /// <summary> | ||
270 | /// Set the media flags on the texture face of the given part. | ||
271 | /// </summary> | ||
272 | /// <remarks> | ||
273 | /// The fact that we need a separate function to do what should be a simple one line operation is BUTT UGLY. | ||
274 | /// </remarks> | ||
275 | /// <param name="part"></param> | ||
276 | /// <param name="face"></param> | ||
277 | /// <param name="flag"></param> | ||
278 | protected void SetPartMediaFlags(SceneObjectPart part, int face, bool flag) | ||
279 | { | ||
280 | Primitive.TextureEntry te = part.Shape.Textures; | ||
281 | Primitive.TextureEntryFace teFace = te.CreateFace((uint)face); | ||
282 | teFace.MediaFlags = flag; | ||
283 | part.Shape.Textures = te; | ||
246 | } | 284 | } |
247 | 285 | ||
248 | /// <summary> | 286 | /// <summary> |
@@ -333,7 +371,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
333 | } | 371 | } |
334 | 372 | ||
335 | // m_log.DebugFormat("[MOAP]: Received {0} media entries for prim {1}", omu.FaceMedia.Length, primId); | 373 | // m_log.DebugFormat("[MOAP]: Received {0} media entries for prim {1}", omu.FaceMedia.Length, primId); |
336 | 374 | // | |
337 | // for (int i = 0; i < omu.FaceMedia.Length; i++) | 375 | // for (int i = 0; i < omu.FaceMedia.Length; i++) |
338 | // { | 376 | // { |
339 | // MediaEntry me = omu.FaceMedia[i]; | 377 | // MediaEntry me = omu.FaceMedia[i]; |
@@ -368,10 +406,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
368 | // FIXME: Race condition here since some other texture entry manipulator may overwrite/get | 406 | // FIXME: Race condition here since some other texture entry manipulator may overwrite/get |
369 | // overwritten. Unfortunately, PrimitiveBaseShape does not allow us to change texture entry | 407 | // overwritten. Unfortunately, PrimitiveBaseShape does not allow us to change texture entry |
370 | // directly. | 408 | // directly. |
371 | Primitive.TextureEntry te = part.Shape.Textures; | 409 | SetPartMediaFlags(part, i, true); |
372 | Primitive.TextureEntryFace face = te.CreateFace((uint)i); | ||
373 | face.MediaFlags = true; | ||
374 | part.Shape.Textures = te; | ||
375 | // m_log.DebugFormat( | 410 | // m_log.DebugFormat( |
376 | // "[MOAP]: Media flags for face {0} is {1}", | 411 | // "[MOAP]: Media flags for face {0} is {1}", |
377 | // i, part.Shape.Textures.FaceTextures[i].MediaFlags); | 412 | // i, part.Shape.Textures.FaceTextures[i].MediaFlags); |
@@ -380,6 +415,8 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
380 | } | 415 | } |
381 | else | 416 | else |
382 | { | 417 | { |
418 | // m_log.DebugFormat("[MOAP]: Setting existing media list for {0}", part.Name); | ||
419 | |||
383 | // We need to go through the media textures one at a time to make sure that we have permission | 420 | // We need to go through the media textures one at a time to make sure that we have permission |
384 | // to change them | 421 | // to change them |
385 | 422 | ||
@@ -401,8 +438,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
401 | if (null == media[i]) | 438 | if (null == media[i]) |
402 | continue; | 439 | continue; |
403 | 440 | ||
404 | Primitive.TextureEntryFace face = te.CreateFace((uint)i); | 441 | SetPartMediaFlags(part, i, true); |
405 | face.MediaFlags = true; | ||
406 | 442 | ||
407 | // m_log.DebugFormat( | 443 | // m_log.DebugFormat( |
408 | // "[MOAP]: Media flags for face {0} is {1}", | 444 | // "[MOAP]: Media flags for face {0} is {1}", |
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/Tests/MoapTests.cs b/OpenSim/Region/CoreModules/World/Media/Moap/Tests/MoapTests.cs new file mode 100644 index 0000000..5b85830 --- /dev/null +++ b/OpenSim/Region/CoreModules/World/Media/Moap/Tests/MoapTests.cs | |||
@@ -0,0 +1,102 @@ | |||
1 | /* | ||
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSimulator Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
29 | using System.Collections.Generic; | ||
30 | using System.IO; | ||
31 | using System.Reflection; | ||
32 | using System.Threading; | ||
33 | using log4net.Config; | ||
34 | using NUnit.Framework; | ||
35 | using OpenMetaverse; | ||
36 | using OpenMetaverse.Assets; | ||
37 | using OpenSim.Framework; | ||
38 | using OpenSim.Region.CoreModules.World.Media.Moap; | ||
39 | using OpenSim.Region.Framework.Scenes; | ||
40 | using OpenSim.Region.Framework.Scenes.Serialization; | ||
41 | using OpenSim.Tests.Common; | ||
42 | using OpenSim.Tests.Common.Mock; | ||
43 | using OpenSim.Tests.Common.Setup; | ||
44 | |||
45 | namespace OpenSim.Region.CoreModules.World.Media.Moap.Tests | ||
46 | { | ||
47 | [TestFixture] | ||
48 | public class MoapTests | ||
49 | { | ||
50 | protected TestScene m_scene; | ||
51 | protected MoapModule m_module; | ||
52 | |||
53 | [SetUp] | ||
54 | public void SetUp() | ||
55 | { | ||
56 | m_module = new MoapModule(); | ||
57 | m_scene = SceneSetupHelpers.SetupScene(); | ||
58 | SceneSetupHelpers.SetupSceneModules(m_scene, m_module); | ||
59 | } | ||
60 | |||
61 | [Test] | ||
62 | public void TestClearMediaUrl() | ||
63 | { | ||
64 | TestHelper.InMethod(); | ||
65 | // log4net.Config.XmlConfigurator.Configure(); | ||
66 | |||
67 | SceneObjectPart part = SceneSetupHelpers.AddSceneObject(m_scene); | ||
68 | MediaEntry me = new MediaEntry(); | ||
69 | |||
70 | m_module.SetMediaEntry(part, 1, me); | ||
71 | m_module.ClearMediaEntry(part, 1); | ||
72 | |||
73 | Assert.That(part.Shape.Media[1], Is.EqualTo(null)); | ||
74 | |||
75 | // Although we've cleared one face, other faces may still be present. So we need to check for an | ||
76 | // update media url version | ||
77 | Assert.That(part.MediaUrl, Is.EqualTo("x-mv:0000000001/" + UUID.Zero)); | ||
78 | |||
79 | // By changing media flag to false, the face texture once again becomes identical to the DefaultTexture. | ||
80 | // Therefore, when libOMV reserializes it, it disappears and we are left with no face texture in this slot. | ||
81 | // Not at all confusing, eh? | ||
82 | Assert.That(part.Shape.Textures.FaceTextures[1], Is.Null); | ||
83 | } | ||
84 | |||
85 | [Test] | ||
86 | public void TestSetMediaUrl() | ||
87 | { | ||
88 | TestHelper.InMethod(); | ||
89 | |||
90 | string homeUrl = "opensimulator.org"; | ||
91 | |||
92 | SceneObjectPart part = SceneSetupHelpers.AddSceneObject(m_scene); | ||
93 | MediaEntry me = new MediaEntry() { HomeURL = homeUrl }; | ||
94 | |||
95 | m_module.SetMediaEntry(part, 1, me); | ||
96 | |||
97 | Assert.That(part.Shape.Media[1].HomeURL, Is.EqualTo(homeUrl)); | ||
98 | Assert.That(part.MediaUrl, Is.EqualTo("x-mv:0000000000/" + UUID.Zero)); | ||
99 | Assert.That(part.Shape.Textures.FaceTextures[1].MediaFlags, Is.True); | ||
100 | } | ||
101 | } | ||
102 | } \ No newline at end of file | ||