diff options
-rw-r--r-- | OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs | 40 |
1 files changed, 39 insertions, 1 deletions
diff --git a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs index 11d0c65..04f64c3 100644 --- a/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs +++ b/OpenSim/Region/Environment/Modules/World/Archiver/ArchiveWriteRequestPreparation.cs | |||
@@ -34,6 +34,7 @@ using OpenSim.Region.Environment.Scenes; | |||
34 | using System.Collections.Generic; | 34 | using System.Collections.Generic; |
35 | using System.Reflection; | 35 | using System.Reflection; |
36 | //using System.Text; | 36 | //using System.Text; |
37 | using System.Text.RegularExpressions; | ||
37 | using System.Threading; | 38 | using System.Threading; |
38 | using libsecondlife; | 39 | using libsecondlife; |
39 | using log4net; | 40 | using log4net; |
@@ -50,6 +51,14 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver | |||
50 | 51 | ||
51 | protected Scene m_scene; | 52 | protected Scene m_scene; |
52 | protected string m_savePath; | 53 | protected string m_savePath; |
54 | |||
55 | /// <summary> | ||
56 | /// Used for identifying uuids embedded in scripts | ||
57 | /// </summary> | ||
58 | protected static readonly Regex m_uuidRegex | ||
59 | = new Regex( | ||
60 | "[0-9a-eA-E]{8}-[0-9a-eA-E]{4}-[0-9a-eA-E]{4}-[0-9a-eA-E]{4}-[0-9a-eA-E]{12}", | ||
61 | RegexOptions.Compiled); | ||
53 | 62 | ||
54 | /// <summary> | 63 | /// <summary> |
55 | /// Used as a temporary store of an asset which represents an object. This can be a null if no appropriate | 64 | /// Used as a temporary store of an asset which represents an object. This can be a null if no appropriate |
@@ -114,6 +123,31 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver | |||
114 | } | 123 | } |
115 | 124 | ||
116 | /// <summary> | 125 | /// <summary> |
126 | /// Record the asset uuids embedded within the given script. | ||
127 | /// </summary> | ||
128 | /// <param name="scriptUuid"></param> | ||
129 | /// <param name="assetUuids">Dictionary in which to record the references</param> | ||
130 | protected void GetScriptAssetUuids(LLUUID scriptUuid, IDictionary<LLUUID, int> assetUuids) | ||
131 | { | ||
132 | AssetBase scriptAsset = GetAsset(scriptUuid); | ||
133 | |||
134 | if (null != scriptAsset) | ||
135 | { | ||
136 | string script = Helpers.FieldToUTF8String(scriptAsset.Data); | ||
137 | m_log.DebugFormat("[ARCHIVER]: Script {0}", script); | ||
138 | MatchCollection uuidMatches = m_uuidRegex.Matches(script); | ||
139 | m_log.DebugFormat("[ARCHIVER]: Found {0} matches in script", uuidMatches.Count); | ||
140 | |||
141 | foreach (Match uuidMatch in uuidMatches) | ||
142 | { | ||
143 | LLUUID uuid = new LLUUID(uuidMatch.Value); | ||
144 | m_log.DebugFormat("[ARCHIVER]: Recording {0} in script", uuid); | ||
145 | assetUuids[uuid] = 1; | ||
146 | } | ||
147 | } | ||
148 | } | ||
149 | |||
150 | /// <summary> | ||
117 | /// Record the uuids referenced by the given wearable asset | 151 | /// Record the uuids referenced by the given wearable asset |
118 | /// </summary> | 152 | /// </summary> |
119 | /// <param name="wearableAssetUuid"></param> | 153 | /// <param name="wearableAssetUuid"></param> |
@@ -200,7 +234,11 @@ namespace OpenSim.Region.Environment.Modules.World.Archiver | |||
200 | { | 234 | { |
201 | GetWearableAssetUuids(tii.AssetID, assetUuids); | 235 | GetWearableAssetUuids(tii.AssetID, assetUuids); |
202 | } | 236 | } |
203 | if ((int)AssetType.Object == tii.Type) | 237 | else if ((int)AssetType.LSLText == tii.Type) |
238 | { | ||
239 | GetScriptAssetUuids(tii.AssetID, assetUuids); | ||
240 | } | ||
241 | else if ((int)AssetType.Object == tii.Type) | ||
204 | { | 242 | { |
205 | GetSceneObjectAssetUuids(tii.AssetID, assetUuids); | 243 | GetSceneObjectAssetUuids(tii.AssetID, assetUuids); |
206 | } | 244 | } |