diff options
author | Melanie | 2011-06-09 02:05:04 +0100 |
---|---|---|
committer | Melanie | 2011-06-09 02:05:04 +0100 |
commit | 326c46ba70cea70ddfe4aef9a6b73edff63e126a (patch) | |
tree | 5e76347b0d77f58717d8e5e4f3b8787ff01a18d7 /OpenSim/Region/CoreModules/Avatar/Inventory/Archiver | |
parent | Make the last otem in a list created with llCSV2List findable (diff) | |
parent | Consistency fix on the last commit. (diff) | |
download | opensim-SC_OLD-326c46ba70cea70ddfe4aef9a6b73edff63e126a.zip opensim-SC_OLD-326c46ba70cea70ddfe4aef9a6b73edff63e126a.tar.gz opensim-SC_OLD-326c46ba70cea70ddfe4aef9a6b73edff63e126a.tar.bz2 opensim-SC_OLD-326c46ba70cea70ddfe4aef9a6b73edff63e126a.tar.xz |
Merge branch 'master' into careminster-presence-refactor
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs | 82 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | 8 |
2 files changed, 62 insertions, 28 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs index 47e34dc..0d90a15 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveUtils.cs | |||
@@ -149,14 +149,15 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
149 | 149 | ||
150 | /// <summary> | 150 | /// <summary> |
151 | /// Find an item given a PATH_DELIMITOR delimited path starting from the user's root folder. | 151 | /// Find an item given a PATH_DELIMITOR delimited path starting from the user's root folder. |
152 | /// | 152 | /// </summary> |
153 | /// <remarks> | ||
153 | /// This method does not handle paths that contain multiple delimitors | 154 | /// This method does not handle paths that contain multiple delimitors |
154 | /// | 155 | /// |
155 | /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some | 156 | /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some |
156 | /// XPath like expression | 157 | /// XPath like expression |
157 | /// | 158 | /// |
158 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | 159 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. |
159 | /// </summary> | 160 | /// </remarks> |
160 | /// | 161 | /// |
161 | /// <param name="inventoryService"> | 162 | /// <param name="inventoryService"> |
162 | /// Inventory service to query | 163 | /// Inventory service to query |
@@ -178,32 +179,66 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
178 | 179 | ||
179 | return FindItemByPath(inventoryService, rootFolder, path); | 180 | return FindItemByPath(inventoryService, rootFolder, path); |
180 | } | 181 | } |
181 | 182 | ||
182 | /// <summary> | 183 | /// <summary> |
183 | /// Find an item given a PATH_DELIMITOR delimited path starting from this folder. | 184 | /// Find an item given a PATH_DELIMITOR delimited path starting from this folder. |
184 | /// | 185 | /// </summary> |
185 | /// This method does not handle paths that contain multiple delimitors | 186 | /// <remarks> |
187 | /// This method does not handle paths that contain multiple delimiters | ||
186 | /// | 188 | /// |
187 | /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some | 189 | /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some |
188 | /// XPath like expression | 190 | /// XPath like expression |
189 | /// | 191 | /// |
190 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | 192 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. |
191 | /// </summary> | 193 | /// </remarks> |
192 | /// | 194 | /// |
193 | /// <param name="inventoryService"> | 195 | /// <param name="inventoryService">Inventory service to query</param> |
194 | /// Inventory service to query | 196 | /// <param name="startFolder">The folder from which the path starts</param> |
195 | /// </param> | 197 | /// <param name="path">The path to the required item.</param> |
196 | /// <param name="startFolder"> | ||
197 | /// The folder from which the path starts | ||
198 | /// </param> | ||
199 | /// <param name="path"> | ||
200 | /// <param name="path"> | ||
201 | /// The path to the required item. | ||
202 | /// </param> | ||
203 | /// <returns>null if the item is not found</returns> | 198 | /// <returns>null if the item is not found</returns> |
204 | public static InventoryItemBase FindItemByPath( | 199 | public static InventoryItemBase FindItemByPath( |
205 | IInventoryService inventoryService, InventoryFolderBase startFolder, string path) | 200 | IInventoryService inventoryService, InventoryFolderBase startFolder, string path) |
206 | { | 201 | { |
202 | List<InventoryItemBase> foundItems = FindItemsByPath(inventoryService, startFolder, path); | ||
203 | |||
204 | if (foundItems.Count != 0) | ||
205 | return foundItems[0]; | ||
206 | else | ||
207 | return null; | ||
208 | } | ||
209 | |||
210 | public static List<InventoryItemBase> FindItemsByPath( | ||
211 | IInventoryService inventoryService, UUID userId, string path) | ||
212 | { | ||
213 | InventoryFolderBase rootFolder = inventoryService.GetRootFolder(userId); | ||
214 | |||
215 | if (null == rootFolder) | ||
216 | return new List<InventoryItemBase>(); | ||
217 | |||
218 | return FindItemsByPath(inventoryService, rootFolder, path); | ||
219 | } | ||
220 | |||
221 | /// <summary> | ||
222 | /// Find items that match a given PATH_DELIMITOR delimited path starting from this folder. | ||
223 | /// </summary> | ||
224 | /// <remarks> | ||
225 | /// This method does not handle paths that contain multiple delimiters | ||
226 | /// | ||
227 | /// FIXME: We do not yet handle situations where folders or items have the same name. We could handle this by some | ||
228 | /// XPath like expression | ||
229 | /// | ||
230 | /// FIXME: Delimitors which occur in names themselves are not currently escapable. | ||
231 | /// </remarks> | ||
232 | /// | ||
233 | /// <param name="inventoryService">Inventory service to query</param> | ||
234 | /// <param name="startFolder">The folder from which the path starts</param> | ||
235 | /// <param name="path">The path to the required item.</param> | ||
236 | /// <returns>The items that were found with this path. An empty list if no items were found.</returns> | ||
237 | public static List<InventoryItemBase> FindItemsByPath( | ||
238 | IInventoryService inventoryService, InventoryFolderBase startFolder, string path) | ||
239 | { | ||
240 | List<InventoryItemBase> foundItems = new List<InventoryItemBase>(); | ||
241 | |||
207 | // If the path isn't just / then trim any starting extraneous slashes | 242 | // If the path isn't just / then trim any starting extraneous slashes |
208 | path = path.TrimStart(new char[] { PATH_DELIMITER }); | 243 | path = path.TrimStart(new char[] { PATH_DELIMITER }); |
209 | 244 | ||
@@ -215,11 +250,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
215 | if (components.Length == 1) | 250 | if (components.Length == 1) |
216 | { | 251 | { |
217 | // m_log.DebugFormat( | 252 | // m_log.DebugFormat( |
218 | // "FOUND SINGLE COMPONENT [{0}]. Looking for this in [{1}] {2}", | 253 | // "FOUND SINGLE COMPONENT [{0}]. Looking for this in [{1}] {2}", |
219 | // components[0], startFolder.Name, startFolder.ID); | 254 | // components[0], startFolder.Name, startFolder.ID); |
220 | 255 | ||
221 | List<InventoryItemBase> items = inventoryService.GetFolderItems(startFolder.Owner, startFolder.ID); | 256 | List<InventoryItemBase> items = inventoryService.GetFolderItems(startFolder.Owner, startFolder.ID); |
222 | 257 | ||
223 | // m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Found {0} items in FindItemByPath()", items.Count); | 258 | // m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Found {0} items in FindItemByPath()", items.Count); |
224 | 259 | ||
225 | foreach (InventoryItemBase item in items) | 260 | foreach (InventoryItemBase item in items) |
@@ -227,24 +262,23 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
227 | // m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Inspecting item {0} {1}", item.Name, item.ID); | 262 | // m_log.DebugFormat("[INVENTORY ARCHIVE UTILS]: Inspecting item {0} {1}", item.Name, item.ID); |
228 | 263 | ||
229 | if (item.Name == components[0]) | 264 | if (item.Name == components[0]) |
230 | return item; | 265 | foundItems.Add(item); |
231 | } | 266 | } |
232 | } | 267 | } |
233 | else | 268 | else |
234 | { | 269 | { |
235 | // m_log.DebugFormat("FOUND COMPONENTS [{0}] and [{1}]", components[0], components[1]); | 270 | // m_log.DebugFormat("FOUND COMPONENTS [{0}] and [{1}]", components[0], components[1]); |
236 | 271 | ||
237 | InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID); | 272 | InventoryCollection contents = inventoryService.GetFolderContent(startFolder.Owner, startFolder.ID); |
238 | 273 | ||
239 | foreach (InventoryFolderBase folder in contents.Folders) | 274 | foreach (InventoryFolderBase folder in contents.Folders) |
240 | { | 275 | { |
241 | if (folder.Name == components[0]) | 276 | if (folder.Name == components[0]) |
242 | return FindItemByPath(inventoryService, folder, components[1]); | 277 | foundItems.AddRange(FindItemsByPath(inventoryService, folder, components[1])); |
243 | } | 278 | } |
244 | } | 279 | } |
245 | 280 | ||
246 | // We didn't find an item or intermediate folder with the given name | 281 | return foundItems; |
247 | return null; | ||
248 | } | 282 | } |
249 | 283 | ||
250 | /// <summary> | 284 | /// <summary> |
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs index e043caa..93657a8 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |||
@@ -154,7 +154,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
154 | string serialization = UserInventoryItemSerializer.Serialize(inventoryItem, options, userAccountService); | 154 | string serialization = UserInventoryItemSerializer.Serialize(inventoryItem, options, userAccountService); |
155 | m_archiveWriter.WriteFile(filename, serialization); | 155 | m_archiveWriter.WriteFile(filename, serialization); |
156 | 156 | ||
157 | if (SaveAssets) | 157 | AssetType itemAssetType = (AssetType)inventoryItem.AssetType; |
158 | |||
159 | // Don't chase down link asset items as they actually point to their target item IDs rather than an asset | ||
160 | if (SaveAssets && itemAssetType != AssetType.Link && itemAssetType != AssetType.LinkFolder) | ||
158 | m_assetGatherer.GatherAssetUuids(inventoryItem.AssetID, (AssetType)inventoryItem.AssetType, m_assetUuids); | 161 | m_assetGatherer.GatherAssetUuids(inventoryItem.AssetID, (AssetType)inventoryItem.AssetType, m_assetUuids); |
159 | } | 162 | } |
160 | 163 | ||
@@ -246,10 +249,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver | |||
246 | 249 | ||
247 | // The path may point to an item instead | 250 | // The path may point to an item instead |
248 | if (inventoryFolder == null) | 251 | if (inventoryFolder == null) |
249 | { | ||
250 | inventoryItem = InventoryArchiveUtils.FindItemByPath(m_scene.InventoryService, rootFolder, m_invPath); | 252 | inventoryItem = InventoryArchiveUtils.FindItemByPath(m_scene.InventoryService, rootFolder, m_invPath); |
251 | //inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath); | ||
252 | } | ||
253 | 253 | ||
254 | if (null == inventoryFolder && null == inventoryItem) | 254 | if (null == inventoryFolder && null == inventoryItem) |
255 | { | 255 | { |