aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Data/SQLite/SQLiteRegionData.cs55
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs6
-rw-r--r--OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs70
3 files changed, 76 insertions, 55 deletions
diff --git a/OpenSim/Data/SQLite/SQLiteRegionData.cs b/OpenSim/Data/SQLite/SQLiteRegionData.cs
index b564419..f63d35e 100644
--- a/OpenSim/Data/SQLite/SQLiteRegionData.cs
+++ b/OpenSim/Data/SQLite/SQLiteRegionData.cs
@@ -31,7 +31,6 @@ using System.Data;
31using System.Drawing; 31using System.Drawing;
32using System.IO; 32using System.IO;
33using System.Reflection; 33using System.Reflection;
34using System.Xml;
35using log4net; 34using log4net;
36using Mono.Data.Sqlite; 35using Mono.Data.Sqlite;
37using OpenMetaverse; 36using OpenMetaverse;
@@ -1862,28 +1861,7 @@ namespace OpenSim.Data.SQLite
1862 s.ExtraParams = (byte[]) row["ExtraParams"]; 1861 s.ExtraParams = (byte[]) row["ExtraParams"];
1863 1862
1864 if (!(row["Media"] is System.DBNull)) 1863 if (!(row["Media"] is System.DBNull))
1865 { 1864 s.MediaRaw = (string)row["Media"];
1866 using (StringReader sr = new StringReader((string)row["Media"]))
1867 {
1868 using (XmlTextReader xtr = new XmlTextReader(sr))
1869 {
1870 xtr.ReadStartElement("osmedia");
1871
1872 OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());
1873
1874 List<MediaEntry> mediaEntries = new List<MediaEntry>();
1875 foreach (OSD osdMe in osdMeArray)
1876 {
1877 MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
1878 mediaEntries.Add(me);
1879 }
1880
1881 s.Media = mediaEntries;
1882
1883 xtr.ReadEndElement();
1884 }
1885 }
1886 }
1887 1865
1888 return s; 1866 return s;
1889 } 1867 }
@@ -1928,36 +1906,7 @@ namespace OpenSim.Data.SQLite
1928 1906
1929 row["Texture"] = s.TextureEntry; 1907 row["Texture"] = s.TextureEntry;
1930 row["ExtraParams"] = s.ExtraParams; 1908 row["ExtraParams"] = s.ExtraParams;
1931 1909 row["Media"] = s.MediaRaw;
1932 if (null != s.Media)
1933 {
1934 using (StringWriter sw = new StringWriter())
1935 {
1936 using (XmlTextWriter xtw = new XmlTextWriter(sw))
1937 {
1938 xtw.WriteStartElement("osmedia");
1939 xtw.WriteAttributeString("type", "sl");
1940 xtw.WriteAttributeString("major_version", "0");
1941 xtw.WriteAttributeString("minor_version", "1");
1942
1943 OSDArray meArray = new OSDArray();
1944 foreach (MediaEntry me in s.Media)
1945 {
1946 OSD osd = (null == me ? new OSD() : me.GetOSD());
1947 meArray.Add(osd);
1948 }
1949
1950 xtw.WriteStartElement("osdata");
1951 xtw.WriteRaw(OSDParser.SerializeLLSDXmlString(meArray));
1952 xtw.WriteEndElement();
1953
1954 xtw.WriteEndElement();
1955
1956 xtw.Flush();
1957 row["Media"] = sw.ToString();
1958 }
1959 }
1960 }
1961 } 1910 }
1962 1911
1963 /// <summary> 1912 /// <summary>
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index 85638ca..03ddb33 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -174,6 +174,12 @@ namespace OpenSim.Framework
174 } 174 }
175 175
176 /// <summary> 176 /// <summary>
177 /// Raw media data suitable for serialization operations. This should only ever be used by an IMoapModule.
178 /// </summary>
179 [XmlIgnore]
180 public string MediaRaw { get; set; }
181
182 /// <summary>
177 /// Entries to store media textures on each face 183 /// Entries to store media textures on each face
178 /// </summary> 184 /// </summary>
179 /// Do not change this value directly - always do it through an IMoapModule. 185 /// Do not change this value directly - always do it through an IMoapModule.
diff --git a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
index 263ee57..0e03318 100644
--- a/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
+++ b/OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs
@@ -32,6 +32,7 @@ using System.Collections.Specialized;
32using System.Reflection; 32using System.Reflection;
33using System.IO; 33using System.IO;
34using System.Web; 34using System.Web;
35using System.Xml;
35using log4net; 36using log4net;
36using Mono.Addins; 37using Mono.Addins;
37using Nini.Config; 38using Nini.Config;
@@ -46,6 +47,7 @@ using OpenSim.Region.Framework.Interfaces;
46using OpenSim.Region.Framework.Scenes; 47using OpenSim.Region.Framework.Scenes;
47using OpenSim.Services.Interfaces; 48using OpenSim.Services.Interfaces;
48using Caps = OpenSim.Framework.Capabilities.Caps; 49using Caps = OpenSim.Framework.Capabilities.Caps;
50using OSDArray = OpenMetaverse.StructuredData.OSDArray;
49using OSDMap = OpenMetaverse.StructuredData.OSDMap; 51using OSDMap = OpenMetaverse.StructuredData.OSDMap;
50 52
51namespace OpenSim.Region.CoreModules.Media.Moap 53namespace OpenSim.Region.CoreModules.Media.Moap
@@ -162,12 +164,76 @@ namespace OpenSim.Region.CoreModules.Media.Moap
162 public void OnSceneObjectLoaded(SceneObjectGroup so) 164 public void OnSceneObjectLoaded(SceneObjectGroup so)
163 { 165 {
164 m_log.DebugFormat("[MOAP]: OnSceneObjectLoaded fired for {0} {1}", so.Name, so.UUID); 166 m_log.DebugFormat("[MOAP]: OnSceneObjectLoaded fired for {0} {1}", so.Name, so.UUID);
167
168 so.ForEachPart(OnSceneObjectPartLoaded);
165 } 169 }
166 170
167 public void OnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo) 171 public void OnSceneObjectPreSave(SceneObjectGroup persistingSo, SceneObjectGroup originalSo)
168 { 172 {
169 m_log.DebugFormat("[MOAP]: OnSceneObjectPreSave fired for {0} {1}", persistingSo.Name, persistingSo.UUID); 173 m_log.DebugFormat("[MOAP]: OnSceneObjectPreSave fired for {0} {1}", persistingSo.Name, persistingSo.UUID);
170 } 174
175 persistingSo.ForEachPart(OnSceneObjectPartPreSave);
176 }
177
178 protected void OnSceneObjectPartLoaded(SceneObjectPart part)
179 {
180 if (null == part.Shape.MediaRaw)
181 return;
182
183 using (StringReader sr = new StringReader(part.Shape.MediaRaw))
184 {
185 using (XmlTextReader xtr = new XmlTextReader(sr))
186 {
187 xtr.ReadStartElement("osmedia");
188
189 OSDArray osdMeArray = (OSDArray)OSDParser.DeserializeLLSDXml(xtr.ReadInnerXml());
190
191 List<MediaEntry> mediaEntries = new List<MediaEntry>();
192 foreach (OSD osdMe in osdMeArray)
193 {
194 MediaEntry me = (osdMe is OSDMap ? MediaEntry.FromOSD(osdMe) : new MediaEntry());
195 mediaEntries.Add(me);
196 }
197
198 xtr.ReadEndElement();
199
200 part.Shape.Media = mediaEntries;
201 }
202 }
203 }
204
205 protected void OnSceneObjectPartPreSave(SceneObjectPart part)
206 {
207 if (null == part.Shape.Media)
208 return;
209
210 using (StringWriter sw = new StringWriter())
211 {
212 using (XmlTextWriter xtw = new XmlTextWriter(sw))
213 {
214 xtw.WriteStartElement("osmedia");
215 xtw.WriteAttributeString("type", "sl");
216 xtw.WriteAttributeString("major_version", "0");
217 xtw.WriteAttributeString("minor_version", "1");
218
219 OSDArray meArray = new OSDArray();
220 foreach (MediaEntry me in part.Shape.Media)
221 {
222 OSD osd = (null == me ? new OSD() : me.GetOSD());
223 meArray.Add(osd);
224 }
225
226 xtw.WriteStartElement("osdata");
227 xtw.WriteRaw(OSDParser.SerializeLLSDXmlString(meArray));
228 xtw.WriteEndElement();
229
230 xtw.WriteEndElement();
231
232 xtw.Flush();
233 part.Shape.MediaRaw = sw.ToString();
234 }
235 }
236 }
171 237
172 public MediaEntry GetMediaEntry(SceneObjectPart part, int face) 238 public MediaEntry GetMediaEntry(SceneObjectPart part, int face)
173 { 239 {