aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2010-07-26 21:09:54 +0100
committerJustin Clark-Casey (justincc)2010-07-26 21:09:54 +0100
commitd5e8272ad44e87a4ac1a7b142ca36b5c5978fca7 (patch)
tree5ed373d0ec1f5e027c005c9a3d03b4e5150920a4
parentAdd EventManager.OnSceneObjectPreSave() for future use. This is triggered im... (diff)
downloadopensim-SC-d5e8272ad44e87a4ac1a7b142ca36b5c5978fca7.zip
opensim-SC-d5e8272ad44e87a4ac1a7b142ca36b5c5978fca7.tar.gz
opensim-SC-d5e8272ad44e87a4ac1a7b142ca36b5c5978fca7.tar.bz2
opensim-SC-d5e8272ad44e87a4ac1a7b142ca36b5c5978fca7.tar.xz
relocate serialization code from SQLiteRegionData to MoapModule using load and save events.
This is better modularity. It also allows MoapModule to be replaced with some other media module that may behave completely differently in the future. Remaining non-modularity: PrimitiveBaseShape needs explicit Media and MediaRaw fields. MediaRaw is required in order to shuttle the pre-serialization data back and forth from the database layer. The database also needs to know about MediaRaw though not about Media. IMO, it would be extremely nice to remove these hard codings but this is a bridge too far at the present time.
Diffstat (limited to '')
-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 {