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.cs94
1 files changed, 47 insertions, 47 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
index 71c4740..364dc28 100644
--- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
+++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveWriteRequest.cs
@@ -41,47 +41,47 @@ using OpenSim.Region.CoreModules.World.Archiver;
41using OpenSim.Region.Framework.Scenes; 41using OpenSim.Region.Framework.Scenes;
42 42
43namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver 43namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
44{ 44{
45 public class InventoryArchiveWriteRequest 45 public class InventoryArchiveWriteRequest
46 { 46 {
47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 47 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
48 48
49 protected TarArchiveWriter m_archive; 49 protected TarArchiveWriter m_archive;
50 protected UuidGatherer m_assetGatherer; 50 protected UuidGatherer m_assetGatherer;
51 protected Dictionary<UUID, int> assetUuids = new Dictionary<UUID, int>(); 51 protected Dictionary<UUID, int> assetUuids = new Dictionary<UUID, int>();
52 52
53 private InventoryArchiverModule m_module; 53 private InventoryArchiverModule m_module;
54 private CachedUserInfo m_userInfo; 54 private CachedUserInfo m_userInfo;
55 private string m_invPath; 55 private string m_invPath;
56 56
57 /// <value> 57 /// <value>
58 /// The stream to which the inventory archive will be saved. 58 /// The stream to which the inventory archive will be saved.
59 /// </value> 59 /// </value>
60 private Stream m_saveStream; 60 private Stream m_saveStream;
61 61
62 /// <summary> 62 /// <summary>
63 /// Constructor 63 /// Constructor
64 /// </summary> 64 /// </summary>
65 public InventoryArchiveWriteRequest( 65 public InventoryArchiveWriteRequest(
66 InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, string savePath) 66 InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, string savePath)
67 : this( 67 : this(
68 module, 68 module,
69 userInfo, 69 userInfo,
70 invPath, 70 invPath,
71 new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress)) 71 new GZipStream(new FileStream(savePath, FileMode.Create), CompressionMode.Compress))
72 { 72 {
73 } 73 }
74 74
75 /// <summary> 75 /// <summary>
76 /// Constructor 76 /// Constructor
77 /// </summary> 77 /// </summary>
78 public InventoryArchiveWriteRequest( 78 public InventoryArchiveWriteRequest(
79 InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, Stream saveStream) 79 InventoryArchiverModule module, CachedUserInfo userInfo, string invPath, Stream saveStream)
80 { 80 {
81 m_module = module; 81 m_module = module;
82 m_userInfo = userInfo; 82 m_userInfo = userInfo;
83 m_invPath = invPath; 83 m_invPath = invPath;
84 m_saveStream = saveStream; 84 m_saveStream = saveStream;
85 m_assetGatherer = new UuidGatherer(m_module.CommsManager.AssetCache); 85 m_assetGatherer = new UuidGatherer(m_module.CommsManager.AssetCache);
86 } 86 }
87 87
@@ -89,22 +89,22 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
89 { 89 {
90 AssetsArchiver assetsArchiver = new AssetsArchiver(assetsFound); 90 AssetsArchiver assetsArchiver = new AssetsArchiver(assetsFound);
91 assetsArchiver.Archive(m_archive); 91 assetsArchiver.Archive(m_archive);
92 92
93 Exception reportedException = null; 93 Exception reportedException = null;
94 bool succeeded = true; 94 bool succeeded = true;
95 95
96 try 96 try
97 { 97 {
98 m_archive.Close(); 98 m_archive.Close();
99 } 99 }
100 catch (IOException e) 100 catch (IOException e)
101 { 101 {
102 m_saveStream.Close(); 102 m_saveStream.Close();
103 reportedException = e; 103 reportedException = e;
104 succeeded = false; 104 succeeded = false;
105 } 105 }
106 106
107 m_module.TriggerInventoryArchiveSaved(succeeded, m_userInfo, m_invPath, m_saveStream, reportedException); 107 m_module.TriggerInventoryArchiveSaved(succeeded, m_userInfo, m_invPath, m_saveStream, reportedException);
108 } 108 }
109 109
110 protected void SaveInvItem(InventoryItemBase inventoryItem, string path) 110 protected void SaveInvItem(InventoryItemBase inventoryItem, string path)
@@ -113,9 +113,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
113 StringWriter sw = new StringWriter(); 113 StringWriter sw = new StringWriter();
114 XmlTextWriter writer = new XmlTextWriter(sw); 114 XmlTextWriter writer = new XmlTextWriter(sw);
115 writer.Formatting = Formatting.Indented; 115 writer.Formatting = Formatting.Indented;
116 116
117 writer.WriteStartElement("InventoryItem"); 117 writer.WriteStartElement("InventoryItem");
118 118
119 writer.WriteStartElement("Name"); 119 writer.WriteStartElement("Name");
120 writer.WriteString(inventoryItem.Name); 120 writer.WriteString(inventoryItem.Name);
121 writer.WriteEndElement(); 121 writer.WriteEndElement();
@@ -170,7 +170,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
170 writer.WriteStartElement("GroupOwned"); 170 writer.WriteStartElement("GroupOwned");
171 writer.WriteString(inventoryItem.GroupOwned.ToString()); 171 writer.WriteString(inventoryItem.GroupOwned.ToString());
172 writer.WriteEndElement(); 172 writer.WriteEndElement();
173 173
174 writer.WriteEndElement(); 174 writer.WriteEndElement();
175 175
176 m_archive.WriteFile(filename, sw.ToString()); 176 m_archive.WriteFile(filename, sw.ToString());
@@ -180,43 +180,43 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
180 180
181 protected void SaveInvDir(InventoryFolderImpl inventoryFolder, string path) 181 protected void SaveInvDir(InventoryFolderImpl inventoryFolder, string path)
182 { 182 {
183 path += 183 path +=
184 string.Format( 184 string.Format(
185 "{0}{1}{2}/", 185 "{0}{1}{2}/",
186 inventoryFolder.Name, 186 inventoryFolder.Name,
187 InventoryArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, 187 ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR,
188 inventoryFolder.ID); 188 inventoryFolder.ID);
189 m_archive.WriteDir(path); 189 m_archive.WriteDir(path);
190 190
191 List<InventoryFolderImpl> childFolders = inventoryFolder.RequestListOfFolderImpls(); 191 List<InventoryFolderImpl> childFolders = inventoryFolder.RequestListOfFolderImpls();
192 List<InventoryItemBase> items = inventoryFolder.RequestListOfItems(); 192 List<InventoryItemBase> items = inventoryFolder.RequestListOfItems();
193 193
194 /* 194 /*
195 Dictionary identicalFolderNames = new Dictionary<string, int>(); 195 Dictionary identicalFolderNames = new Dictionary<string, int>();
196 196
197 foreach (InventoryFolderImpl folder in inventories) 197 foreach (InventoryFolderImpl folder in inventories)
198 { 198 {
199 199
200 if (!identicalFolderNames.ContainsKey(folder.Name)) 200 if (!identicalFolderNames.ContainsKey(folder.Name))
201 identicalFolderNames[folder.Name] = 0; 201 identicalFolderNames[folder.Name] = 0;
202 else 202 else
203 identicalFolderNames[folder.Name] = identicalFolderNames[folder.Name]++; 203 identicalFolderNames[folder.Name] = identicalFolderNames[folder.Name]++;
204 204
205 int folderNameNumber = identicalFolderName[folder.Name]; 205 int folderNameNumber = identicalFolderName[folder.Name];
206 206
207 SaveInvDir( 207 SaveInvDir(
208 folder, 208 folder,
209 string.Format( 209 string.Format(
210 "{0}{1}{2}/", 210 "{0}{1}{2}/",
211 path, InventoryArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folderNameNumber)); 211 path, ArchiveConstants.INVENTORY_NODE_NAME_COMPONENT_SEPARATOR, folderNameNumber));
212 } 212 }
213 */ 213 */
214 214
215 foreach (InventoryFolderImpl childFolder in childFolders) 215 foreach (InventoryFolderImpl childFolder in childFolders)
216 { 216 {
217 SaveInvDir(childFolder, path); 217 SaveInvDir(childFolder, path);
218 } 218 }
219 219
220 foreach (InventoryItemBase item in items) 220 foreach (InventoryItemBase item in items)
221 { 221 {
222 SaveInvItem(item, path); 222 SaveInvItem(item, path);
@@ -232,9 +232,9 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
232 InventoryItemBase inventoryItem = null; 232 InventoryItemBase inventoryItem = null;
233 233
234 if (!m_userInfo.HasReceivedInventory) 234 if (!m_userInfo.HasReceivedInventory)
235 { 235 {
236 // If the region server has access to the user admin service (by which users are created), 236 // If the region server has access to the user admin service (by which users are created),
237 // then we'll assume that it's okay to fiddle with the user's inventory even if they are not on the 237 // then we'll assume that it's okay to fiddle with the user's inventory even if they are not on the
238 // server. 238 // server.
239 // 239 //
240 // FIXME: FetchInventory should probably be assumed to by async anyway, since even standalones might 240 // FIXME: FetchInventory should probably be assumed to by async anyway, since even standalones might
@@ -252,7 +252,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
252 m_userInfo.FetchInventory(); 252 m_userInfo.FetchInventory();
253 } 253 }
254 } 254 }
255 255
256 // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl 256 // Eliminate double slashes and any leading / on the path. This might be better done within InventoryFolderImpl
257 // itself (possibly at a small loss in efficiency). 257 // itself (possibly at a small loss in efficiency).
258 string[] components 258 string[] components
@@ -280,8 +280,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
280 { 280 {
281 inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath); 281 inventoryItem = m_userInfo.RootFolder.FindItemByPath(m_invPath);
282 } 282 }
283 283
284 m_archive = new TarArchiveWriter(m_saveStream); 284 m_archive = new TarArchiveWriter(m_saveStream);
285 285
286 if (null == inventoryFolder) 286 if (null == inventoryFolder)
287 { 287 {
@@ -289,16 +289,16 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
289 { 289 {
290 m_saveStream.Close(); 290 m_saveStream.Close();
291 m_module.TriggerInventoryArchiveSaved( 291 m_module.TriggerInventoryArchiveSaved(
292 false, m_userInfo, m_invPath, m_saveStream, 292 false, m_userInfo, m_invPath, m_saveStream,
293 new Exception(string.Format("Could not find inventory entry at path {0}", m_invPath))); 293 new Exception(string.Format("Could not find inventory entry at path {0}", m_invPath)));
294 return; 294 return;
295 } 295 }
296 else 296 else
297 { 297 {
298 m_log.DebugFormat( 298 m_log.DebugFormat(
299 "[INVENTORY ARCHIVER]: Found item {0} {1} at {2}", 299 "[INVENTORY ARCHIVER]: Found item {0} {1} at {2}",
300 inventoryItem.Name, inventoryItem.ID, m_invPath); 300 inventoryItem.Name, inventoryItem.ID, m_invPath);
301 301
302 //get and export item info 302 //get and export item info
303 SaveInvItem(inventoryItem, m_invPath); 303 SaveInvItem(inventoryItem, m_invPath);
304 } 304 }
@@ -306,11 +306,11 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver
306 else 306 else
307 { 307 {
308 m_log.DebugFormat( 308 m_log.DebugFormat(
309 "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}", 309 "[INVENTORY ARCHIVER]: Found folder {0} {1} at {2}",
310 inventoryFolder.Name, inventoryFolder.ID, m_invPath); 310 inventoryFolder.Name, inventoryFolder.ID, m_invPath);
311 311
312 //recurse through all dirs getting dirs and files 312 //recurse through all dirs getting dirs and files
313 SaveInvDir(inventoryFolder, InventoryArchiveConstants.INVENTORY_PATH); 313 SaveInvDir(inventoryFolder, ArchiveConstants.INVENTORY_PATH);
314 } 314 }
315 315
316 new AssetsRequest(assetUuids.Keys, m_module.CommsManager.AssetCache, ReceivedAllAssets).Execute(); 316 new AssetsRequest(assetUuids.Keys, m_module.CommsManager.AssetCache, ReceivedAllAssets).Execute();