diff options
author | Teravus Ovares (Dan Olivares) | 2009-09-08 04:43:17 -0400 |
---|---|---|
committer | Teravus Ovares (Dan Olivares) | 2009-09-08 04:43:17 -0400 |
commit | f0e2fd426b074ceb992124cf5eb2ebe8db5c04dd (patch) | |
tree | bea9234644b05887b4c7cc063d457b91610ed9dc /OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | |
parent | * Fixes a 'take object from mega region' and rez it in a regular region.. ... (diff) | |
parent | llRot2Euler() now returns angles -PI < angle < PI (diff) | |
download | opensim-SC_OLD-f0e2fd426b074ceb992124cf5eb2ebe8db5c04dd.zip opensim-SC_OLD-f0e2fd426b074ceb992124cf5eb2ebe8db5c04dd.tar.gz opensim-SC_OLD-f0e2fd426b074ceb992124cf5eb2ebe8db5c04dd.tar.bz2 opensim-SC_OLD-f0e2fd426b074ceb992124cf5eb2ebe8db5c04dd.tar.xz |
Merge branch 'master' of ssh://MyConnection/var/git/opensim
Diffstat (limited to 'OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs | 60 |
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 | { |