diff options
-rw-r--r-- | OpenSim/Data/SQLite/SQLiteRegionData.cs | 55 | ||||
-rw-r--r-- | OpenSim/Framework/PrimitiveBaseShape.cs | 6 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Media/Moap/MoapModule.cs | 70 |
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; | |||
31 | using System.Drawing; | 31 | using System.Drawing; |
32 | using System.IO; | 32 | using System.IO; |
33 | using System.Reflection; | 33 | using System.Reflection; |
34 | using System.Xml; | ||
35 | using log4net; | 34 | using log4net; |
36 | using Mono.Data.Sqlite; | 35 | using Mono.Data.Sqlite; |
37 | using OpenMetaverse; | 36 | using 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; | |||
32 | using System.Reflection; | 32 | using System.Reflection; |
33 | using System.IO; | 33 | using System.IO; |
34 | using System.Web; | 34 | using System.Web; |
35 | using System.Xml; | ||
35 | using log4net; | 36 | using log4net; |
36 | using Mono.Addins; | 37 | using Mono.Addins; |
37 | using Nini.Config; | 38 | using Nini.Config; |
@@ -46,6 +47,7 @@ using OpenSim.Region.Framework.Interfaces; | |||
46 | using OpenSim.Region.Framework.Scenes; | 47 | using OpenSim.Region.Framework.Scenes; |
47 | using OpenSim.Services.Interfaces; | 48 | using OpenSim.Services.Interfaces; |
48 | using Caps = OpenSim.Framework.Capabilities.Caps; | 49 | using Caps = OpenSim.Framework.Capabilities.Caps; |
50 | using OSDArray = OpenMetaverse.StructuredData.OSDArray; | ||
49 | using OSDMap = OpenMetaverse.StructuredData.OSDMap; | 51 | using OSDMap = OpenMetaverse.StructuredData.OSDMap; |
50 | 52 | ||
51 | namespace OpenSim.Region.CoreModules.Media.Moap | 53 | namespace 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 | { |