aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs60
1 files changed, 41 insertions, 19 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 18728c6..dee4a5d 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -60,6 +60,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
60 protected UuidGatherer m_assetGatherer; 60 protected UuidGatherer m_assetGatherer;
61 61
62 /// <value> 62 /// <value>
63 /// We only use this to request modules
64 /// </value>
65 protected Scene m_scene;
66
67 /// <value>
63 /// ID of this request 68 /// ID of this request
64 /// </value> 69 /// </value>
65 protected Guid m_id; 70 protected Guid m_id;
@@ -83,10 +88,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
83 /// Constructor 88 /// Constructor
84 /// </summary> 89 /// </summary>
85 public InventoryArchiveWriteRequest( 90 public InventoryArchiveWriteRequest(
86 Guid id, InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, string savePath) 91 Guid id, InventoryArchiverModule module, Scene scene,
92 CachedUserInfo userInfo, string invPath, string savePath)
87 : this( 93 : this(
88 id, 94 id,
89 module, 95 module,
96 scene,
90 userInfo, 97 userInfo,
91 invPath, 98 invPath,
92 new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress)) 99 new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress))
@@ -97,14 +104,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
97 /// Constructor 104 /// Constructor
98 /// </summary> 105 /// </summary>
99 public InventoryArchiveWriteRequest( 106 public InventoryArchiveWriteRequest(
100 Guid id, InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, Stream saveStream) 107 Guid id, InventoryArchiverModule module, Scene scene,
108 CachedUserInfo userInfo, string invPath, Stream saveStream)
101 { 109 {
102 m_id = id; 110 m_id = id;
103 m_module = module; 111 m_module = module;
112 m_scene = scene;
104 m_userInfo = userInfo; 113 m_userInfo = userInfo;
105 m_invPath = invPath; 114 m_invPath = invPath;
106 m_saveStream = saveStream; 115 m_saveStream = saveStream;
107 m_assetGatherer = new UuidGatherer(m_module.AssetService); 116 m_assetGatherer = new UuidGatherer(m_scene.AssetService);
108 } 117 }
109 118
110 protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids) 119 protected void ReceivedAllAssets(ICollection<UUID> assetsFoundUuids, ICollection<UUID> assetsNotFoundUuids)
@@ -135,7 +144,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
135 m_userUuids[inventoryItem.CreatorIdAsUuid] = 1; 144 m_userUuids[inventoryItem.CreatorIdAsUuid] = 1;
136 145
137 InventoryItemBase saveItem = (InventoryItemBase)inventoryItem.Clone(); 146 InventoryItemBase saveItem = (InventoryItemBase)inventoryItem.Clone();
138 saveItem.CreatorId = OspResolver.MakeOspa(saveItem.CreatorIdAsUuid, m_module.CommsManager); 147 saveItem.CreatorId = OspResolver.MakeOspa(saveItem.CreatorIdAsUuid, m_scene.CommsManager);
139 148
140 string serialization = UserInventoryItemSerializer.Serialize(saveItem); 149 string serialization = UserInventoryItemSerializer.Serialize(saveItem);
141 m_archiveWriter.WriteFile(filename, serialization); 150 m_archiveWriter.WriteFile(filename, serialization);
@@ -149,7 +158,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
149 /// <param name="inventoryFolder">The inventory folder to save</param> 158 /// <param name="inventoryFolder">The inventory folder to save</param>
150 /// <param name="path">The path to which the folder should be saved</param> 159 /// <param name="path">The path to which the folder should be saved</param>
151 /// <param name="saveThisFolderItself">If true, save this folder itself. If false, only saves contents</param> 160 /// <param name="saveThisFolderItself">If true, save this folder itself. If false, only saves contents</param>
152 protected void SaveInvFolder(InventoryFolderImpl inventoryFolder, string path, bool saveThisFolderItself) 161 protected void SaveInvFolder(InventoryFolderBase inventoryFolder, string path, bool saveThisFolderItself)
153 { 162 {
154 if (saveThisFolderItself) 163 if (saveThisFolderItself)
155 { 164 {
@@ -164,15 +173,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
164 m_archiveWriter.WriteDir(path); 173 m_archiveWriter.WriteDir(path);
165 } 174 }
166 175
167 List<InventoryFolderImpl> childFolders = inventoryFolder.RequestListOfFolderImpls(); 176 InventoryCollection contents
168 List<InventoryItemBase> items = inventoryFolder.RequestListOfItems(); 177 = m_scene.InventoryService.GetFolderContent(inventoryFolder.Owner, inventoryFolder.ID);
178 //List<InventoryFolderImpl> childFolders = inventoryFolder.RequestListOfFolderImpls();
179 //List<InventoryItemBase> items = inventoryFolder.RequestListOfItems();
169 180
170 /* 181 /*
171 Dictionary identicalFolderNames = new Dictionary<string, int>(); 182 Dictionary identicalFolderNames = new Dictionary<string, int>();
172 183
173 foreach (InventoryFolderImpl folder in inventories) 184 foreach (InventoryFolderImpl folder in inventories)
174 { 185 {
175
176 if (!identicalFolderNames.ContainsKey(folder.Name)) 186 if (!identicalFolderNames.ContainsKey(folder.Name))
177 identicalFolderNames[folder.Name] = 0; 187 identicalFolderNames[folder.Name] = 0;
178 else 188 else
@@ -188,12 +198,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
188 } 198 }
189 */ 199 */
190 200
191 foreach (InventoryFolderImpl childFolder in childFolders) 201 foreach (InventoryFolderBase childFolder in contents.Folders)
192 { 202 {
193 SaveInvFolder(childFolder, path, true); 203 SaveInvFolder(childFolder, path, true);
194 } 204 }
195 205
196 foreach (InventoryItemBase item in items) 206 foreach (InventoryItemBase item in contents.Items)
197 { 207 {
198 SaveInvItem(item, path); 208 SaveInvItem(item, path);
199 } 209 }
@@ -204,9 +214,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
204 /// </summary> 214 /// </summary>
205 public void Execute() 215 public void Execute()
206 { 216 {
207 InventoryFolderImpl inventoryFolder = null; 217 InventoryFolderBase inventoryFolder = null;
208 InventoryItemBase inventoryItem = null; 218 InventoryItemBase inventoryItem = null;
219 InventoryFolderBase rootFolder = m_scene.InventoryService.GetRootFolder(m_userInfo.UserProfile.ID);
209 220
221 // XXX: Very temporarily, drop and refetch inventory to make sure we have any newly created items in cache
222 // This will disappear very soon once we stop using the old cached inventory.
223 /*
224 m_userInfo.DropInventory();
225 m_userInfo.FetchInventory();
226 */
227
228 /*
210 if (!m_userInfo.HasReceivedInventory) 229 if (!m_userInfo.HasReceivedInventory)
211 { 230 {
212 // If the region server has access to the user admin service (by which users are created), 231 // If the region server has access to the user admin service (by which users are created),
@@ -215,7 +234,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
215 // 234 //
216 // FIXME: FetchInventory should probably be assumed to by async anyway, since even standalones might 235 // FIXME: FetchInventory should probably be assumed to by async anyway, since even standalones might
217 // use a remote inventory service, though this is vanishingly rare at the moment. 236 // use a remote inventory service, though this is vanishingly rare at the moment.
218 if (null == m_module.CommsManager.UserAdminService) 237 if (null == m_scene.CommsManager.UserAdminService)
219 { 238 {
220 m_log.ErrorFormat( 239 m_log.ErrorFormat(
221 "[INVENTORY ARCHIVER]: Have not yet received inventory info for user {0} {1}", 240 "[INVENTORY ARCHIVER]: Have not yet received inventory info for user {0} {1}",
@@ -228,11 +247,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
228 m_userInfo.FetchInventory(); 247 m_userInfo.FetchInventory();
229 } 248 }
230 } 249 }
250 */
231 251
232 bool foundStar = false; 252 bool foundStar = false;
233 253
234 // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl 254 // Eliminate double slashes and any leading / on the path.
235 // itself (possibly at a small loss in efficiency).
236 string[] components 255 string[] components
237 = m_invPath.Split( 256 = m_invPath.Split(
238 new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries); 257 new string[] { InventoryFolderImpl.PATH_DELIMITER }, StringSplitOptions.RemoveEmptyEntries);
@@ -257,18 +276,21 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
257 // Therefore if we still start with a / after the split, then we need the root folder 276 // Therefore if we still start with a / after the split, then we need the root folder
258 if (m_invPath.Length == 0) 277 if (m_invPath.Length == 0)
259 { 278 {
260 inventoryFolder = m_userInfo.RootFolder; 279 inventoryFolder = rootFolder;
261 } 280 }
262 else 281 else
263 { 282 {
264 m_invPath = m_invPath.Remove(m_invPath.LastIndexOf(InventoryFolderImpl.PATH_DELIMITER)); 283 m_invPath = m_invPath.Remove(m_invPath.LastIndexOf(InventoryFolderImpl.PATH_DELIMITER));
265 inventoryFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath); 284 inventoryFolder
285 = InventoryArchiveUtils.FindFolderByPath(m_scene.InventoryService, rootFolder, m_invPath);
286 //inventoryFolder = m_userInfo.RootFolder.FindFolderByPath(m_invPath);
266 } 287 }
267 288
268 // The path may point to an item instead 289 // The path may point to an item instead
269 if (inventoryFolder == null) 290 if (inventoryFolder == null)
270 { 291 {
271 inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath); 292 inventoryItem = InventoryArchiveUtils.FindItemByPath(m_scene.InventoryService, rootFolder, m_invPath);
293 //inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath);
272 } 294 }
273 295
274 m_archiveWriter = new TarArchiveWriter(m_saveStream); 296 m_archiveWriter = new TarArchiveWriter(m_saveStream);
@@ -306,7 +328,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
306 SaveUsers(); 328 SaveUsers();
307 new AssetsRequest( 329 new AssetsRequest(
308 new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys, 330 new AssetsArchiver(m_archiveWriter), m_assetUuids.Keys,
309 m_module.AssetService, ReceivedAllAssets).Execute(); 331 m_scene.AssetService, ReceivedAllAssets).Execute();
310 } 332 }
311 333
312 /// <summary> 334 /// <summary>
@@ -320,7 +342,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
320 { 342 {
321 // Record the creator of this item 343 // Record the creator of this item
322 CachedUserInfo creator 344 CachedUserInfo creator
323 = m_module.CommsManager.UserProfileCacheService.GetUserDetails(creatorId); 345 = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(creatorId);
324 346
325 if (creator != null) 347 if (creator != null)
326 { 348 {