diff options
author | Justin Clark-Casey (justincc) | 2010-08-03 15:45:49 +0100 |
---|---|---|
committer | Justin Clark-Casey (justincc) | 2010-08-03 15:45:49 +0100 |
commit | 60df76314f89d8a489a7f8a3182277cf1a52925c (patch) | |
tree | c3916df4de15bb15b7f3ce04532b742c9bce3aaa /OpenSim/Framework | |
parent | add userExposed parameter to part copy event (diff) | |
download | opensim-SC-60df76314f89d8a489a7f8a3182277cf1a52925c.zip opensim-SC-60df76314f89d8a489a7f8a3182277cf1a52925c.tar.gz opensim-SC-60df76314f89d8a489a7f8a3182277cf1a52925c.tar.bz2 opensim-SC-60df76314f89d8a489a7f8a3182277cf1a52925c.tar.xz |
serialize media textures to inventory with a largely osd representation rather than .net auto-serialization
THIS WILL BREAK ANY EXISTING MEDIA TEXTURE SERIALIZATIONS. If you're testing this, please start with new databases.
This makes media textures serialized in the same way, which is probably better in the long term.
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r-- | OpenSim/Framework/PrimitiveBaseShape.cs | 90 |
1 files changed, 87 insertions, 3 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 | ||