diff options
-rw-r--r-- | OpenSim/Framework/PrimitiveBaseShape.cs | 90 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs | 8 |
2 files changed, 91 insertions, 7 deletions
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs index 03ddb33..de7e42d 100644 --- a/OpenSim/Framework/PrimitiveBaseShape.cs +++ b/OpenSim/Framework/PrimitiveBaseShape.cs | |||
@@ -29,7 +29,10 @@ using System; | |||
29 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
30 | using System.Drawing; | 30 | using System.Drawing; |
31 | using System.Drawing.Imaging; | 31 | using System.Drawing.Imaging; |
32 | using System.IO; | ||
32 | using System.Reflection; | 33 | using System.Reflection; |
34 | using System.Xml; | ||
35 | using System.Xml.Schema; | ||
33 | using System.Xml.Serialization; | 36 | using System.Xml.Serialization; |
34 | using log4net; | 37 | using log4net; |
35 | using OpenMetaverse; | 38 | using OpenMetaverse; |
@@ -183,7 +186,7 @@ namespace OpenSim.Framework | |||
183 | /// Entries to store media textures on each face | 186 | /// Entries to store media textures on each face |
184 | /// </summary> | 187 | /// </summary> |
185 | /// Do not change this value directly - always do it through an IMoapModule. | 188 | /// Do not change this value directly - always do it through an IMoapModule. |
186 | public List<MediaEntry> Media { get; set; } | 189 | public MediaList Media { get; set; } |
187 | 190 | ||
188 | public PrimitiveBaseShape() | 191 | public PrimitiveBaseShape() |
189 | { | 192 | { |
@@ -1221,5 +1224,86 @@ namespace OpenSim.Framework | |||
1221 | 1224 | ||
1222 | return prim; | 1225 | return prim; |
1223 | } | 1226 | } |
1224 | } | 1227 | |
1225 | } | 1228 | public class MediaList : List<MediaEntry>, IXmlSerializable |
1229 | { | ||
1230 | public const string MEDIA_TEXTURE_TYPE = "sl"; | ||
1231 | |||
1232 | public MediaList() : base() {} | ||
1233 | public MediaList(IEnumerable<MediaEntry> collection) : base(collection) {} | ||
1234 | public MediaList(int capacity) : base(capacity) {} | ||
1235 | |||
1236 | public XmlSchema GetSchema() | ||
1237 | { | ||
1238 | return null; | ||
1239 | } | ||
1240 | |||
1241 | public void WriteXml(XmlWriter writer) | ||
1242 | { | ||
1243 | lock (this) | ||
1244 | { | ||
1245 | using (StringWriter sw = new StringWriter()) | ||
1246 | { | ||
1247 | using (XmlTextWriter xtw = new XmlTextWriter(sw)) | ||
1248 | { | ||
1249 | xtw.WriteStartElement("osmedia"); | ||
1250 | xtw.WriteAttributeString("type", MEDIA_TEXTURE_TYPE); | ||
1251 | xtw.WriteAttributeString("major_version", "0"); | ||
1252 | xtw.WriteAttributeString("minor_version", "1"); | ||
1253 | |||
1254 | OSDArray meArray = new OSDArray(); | ||
1255 | foreach (MediaEntry me in this) | ||
1256 | { | ||
1257 | OSD osd = (null == me ? new OSD() : me.GetOSD()); | ||
1258 | meArray.Add(osd); | ||
1259 | } | ||
1260 | |||
1261 | xtw.WriteStartElement("osdata"); | ||
1262 | xtw.WriteRaw(OSDParser.SerializeLLSDXmlString(meArray)); | ||
1263 | xtw.WriteEndElement(); | ||
1264 | |||
1265 | xtw.WriteEndElement(); | ||
1266 | |||
1267 | xtw.Flush(); | ||
1268 | writer.WriteRaw(sw.ToString()); | ||
1269 | } | ||
1270 | } | ||
1271 | } | ||
1272 | } | ||
1273 | |||
1274 | public void ReadXml(XmlReader reader) | ||
1275 | { | ||
1276 | if (reader.IsEmptyElement) | ||
1277 | return; | ||
1278 | |||
1279 | string rawXml = reader.ReadInnerXml(); | ||
1280 | using (StringReader sr = new StringReader(rawXml)) | ||
1281 | { | ||
1282 | using (XmlTextReader xtr = new XmlTextReader(sr)) | ||
1283 | { | ||
1284 | xtr.MoveToContent(); | ||
1285 | |||
1286 | string type = xtr.GetAttribute("type"); | ||
1287 | //m_log.DebugFormat("[MOAP]: Loaded media texture entry with type {0}", type); | ||
1288 | |||
1289 | if (type != MEDIA_TEXTURE_TYPE) | ||
1290 | return; | ||
1291 | |||
1292 | xtr.ReadStartElement("osmedia"); | ||
1293 | |||
1294 | OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml()); | ||
1295 | |||
1296 | List<MediaEntry> mediaEntries = new List<MediaEntry>(); | ||
1297 | foreach (OSD osdMe in osdMeArray) | ||
1298 | { | ||
1299 | MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry()); | ||
1300 | Add(me); | ||
1301 | } | ||
1302 | |||
1303 | xtr.ReadEndElement(); | ||
1304 | } | ||
1305 | } | ||
1306 | } | ||
1307 | } | ||
1308 | } | ||
1309 | } \ No newline at end of file | ||
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs index e9d723b..339a979 100644 --- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs +++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs | |||
@@ -219,7 +219,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
219 | 219 | ||
220 | OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml()); | 220 | OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml()); |
221 | 221 | ||
222 | List<MediaEntry> mediaEntries = new List<MediaEntry>(); | 222 | PrimitiveBaseShape.MediaList mediaEntries = new PrimitiveBaseShape.MediaList(); |
223 | foreach (OSD osdMe in osdMeArray) | 223 | foreach (OSD osdMe in osdMeArray) |
224 | { | 224 | { |
225 | MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry()); | 225 | MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry()); |
@@ -270,7 +270,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
270 | { | 270 | { |
271 | if (original.Shape.Media != null) | 271 | if (original.Shape.Media != null) |
272 | { | 272 | { |
273 | List<MediaEntry> dupeMedia = new List<MediaEntry>(); | 273 | PrimitiveBaseShape.MediaList dupeMedia = new PrimitiveBaseShape.MediaList(); |
274 | 274 | ||
275 | foreach (MediaEntry me in original.Shape.Media) | 275 | foreach (MediaEntry me in original.Shape.Media) |
276 | { | 276 | { |
@@ -315,7 +315,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
315 | CheckFaceParam(part, face); | 315 | CheckFaceParam(part, face); |
316 | 316 | ||
317 | if (null == part.Shape.Media) | 317 | if (null == part.Shape.Media) |
318 | part.Shape.Media = new List<MediaEntry>(new MediaEntry[part.GetNumberOfSides()]); | 318 | part.Shape.Media = new PrimitiveBaseShape.MediaList(new MediaEntry[part.GetNumberOfSides()]); |
319 | 319 | ||
320 | part.Shape.Media[face] = me; | 320 | part.Shape.Media[face] = me; |
321 | UpdateMediaUrl(part, UUID.Zero); | 321 | UpdateMediaUrl(part, UUID.Zero); |
@@ -439,7 +439,7 @@ namespace OpenSim.Region.CoreModules.Media.Moap | |||
439 | if (null == media) | 439 | if (null == media) |
440 | { | 440 | { |
441 | // m_log.DebugFormat("[MOAP]: Setting all new media list for {0}", part.Name); | 441 | // m_log.DebugFormat("[MOAP]: Setting all new media list for {0}", part.Name); |
442 | part.Shape.Media = new List<MediaEntry>(omu.FaceMedia); | 442 | part.Shape.Media = new PrimitiveBaseShape.MediaList(omu.FaceMedia); |
443 | 443 | ||
444 | for (int i = 0; i < omu.FaceMedia.Length; i++) | 444 | for (int i = 0; i < omu.FaceMedia.Length; i++) |
445 | { | 445 | { |