diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | 57 |
1 files changed, 47 insertions, 10 deletions
diff --git a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 79e00cd..a29931c 100644 --- a/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/Environment/Modules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs | |||
@@ -50,9 +50,7 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver | |||
50 | protected Scene scene; | 50 | protected Scene scene; |
51 | protected TarArchiveReader archive; | 51 | protected TarArchiveReader archive; |
52 | private static System.Text.ASCIIEncoding m_asciiEncoding = new System.Text.ASCIIEncoding(); | 52 | private static System.Text.ASCIIEncoding m_asciiEncoding = new System.Text.ASCIIEncoding(); |
53 | 53 | ||
54 | CachedUserInfo userInfo; | ||
55 | UserProfileData userProfile; | ||
56 | CommunicationsManager commsManager; | 54 | CommunicationsManager commsManager; |
57 | 55 | ||
58 | public InventoryArchiveReadRequest(Scene currentScene, CommunicationsManager commsManager) | 56 | public InventoryArchiveReadRequest(Scene currentScene, CommunicationsManager commsManager) |
@@ -81,15 +79,13 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver | |||
81 | item.InvType = System.Convert.ToInt32(reader.ReadString()); | 79 | item.InvType = System.Convert.ToInt32(reader.ReadString()); |
82 | reader.ReadEndElement(); | 80 | reader.ReadEndElement(); |
83 | reader.ReadStartElement("CreatorUUID"); | 81 | reader.ReadStartElement("CreatorUUID"); |
84 | item.Creator = UUID.Parse(reader.ReadString()); | 82 | item.Creator = UUID.Parse(reader.ReadString()); |
85 | item.Creator = userProfile.ID; | ||
86 | reader.ReadEndElement(); | 83 | reader.ReadEndElement(); |
87 | reader.ReadStartElement("CreationDate"); | 84 | reader.ReadStartElement("CreationDate"); |
88 | item.CreationDate = System.Convert.ToInt32(reader.ReadString()); | 85 | item.CreationDate = System.Convert.ToInt32(reader.ReadString()); |
89 | reader.ReadEndElement(); | 86 | reader.ReadEndElement(); |
90 | reader.ReadStartElement("Owner"); | 87 | reader.ReadStartElement("Owner"); |
91 | item.Owner = UUID.Parse(reader.ReadString()); | 88 | item.Owner = UUID.Parse(reader.ReadString()); |
92 | item.Owner = userProfile.ID; | ||
93 | reader.ReadEndElement(); | 89 | reader.ReadEndElement(); |
94 | //No description would kill it | 90 | //No description would kill it |
95 | if (reader.IsEmptyElement) | 91 | if (reader.IsEmptyElement) |
@@ -149,14 +145,47 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver | |||
149 | int successfulAssetRestores = 0; | 145 | int successfulAssetRestores = 0; |
150 | int failedAssetRestores = 0; | 146 | int failedAssetRestores = 0; |
151 | int successfulItemRestores = 0; | 147 | int successfulItemRestores = 0; |
148 | |||
149 | UserProfileData userProfile = commsManager.UserService.GetUserProfile(firstName, lastName); | ||
150 | if (null == userProfile) | ||
151 | { | ||
152 | m_log.ErrorFormat("[CONSOLE]: Failed to find user {0} {1}", firstName, lastName); | ||
153 | return; | ||
154 | } | ||
155 | |||
156 | CachedUserInfo userInfo = commsManager.UserProfileCacheService.GetUserDetails(userProfile.ID); | ||
157 | if (null == userInfo) | ||
158 | { | ||
159 | m_log.ErrorFormat( | ||
160 | "[CONSOLE]: Failed to find user info for {0} {1} {2}", | ||
161 | firstName, lastName, userProfile.ID); | ||
162 | |||
163 | return; | ||
164 | } | ||
165 | |||
166 | if (!userInfo.HasReceivedInventory) | ||
167 | { | ||
168 | m_log.ErrorFormat( | ||
169 | "[CONSOLE]: Have not yet received inventory info for user {0} {1} {2}", | ||
170 | firstName, lastName, userProfile.ID); | ||
171 | |||
172 | return; | ||
173 | } | ||
174 | |||
175 | InventoryFolderImpl inventoryFolder = userInfo.RootFolder.FindFolderByPath(invPath); | ||
176 | |||
177 | if (null == inventoryFolder) | ||
178 | { | ||
179 | // TODO: Later on, automatically create this folder if it does not exist | ||
180 | m_log.ErrorFormat("[ARCHIVER]: Inventory path {0} does not exist", invPath); | ||
181 | |||
182 | return; | ||
183 | } | ||
152 | 184 | ||
153 | archive | 185 | archive |
154 | = new TarArchiveReader(new GZipStream( | 186 | = new TarArchiveReader(new GZipStream( |
155 | new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress)); | 187 | new FileStream(loadPath, FileMode.Open), CompressionMode.Decompress)); |
156 | 188 | ||
157 | userProfile = commsManager.UserService.GetUserProfile(firstName, lastName); | ||
158 | userInfo = commsManager.UserProfileCacheService.GetUserDetails(userProfile.ID); | ||
159 | |||
160 | byte[] data; | 189 | byte[] data; |
161 | while ((data = archive.ReadEntry(out filePath)) != null) | 190 | while ((data = archive.ReadEntry(out filePath)) != null) |
162 | { | 191 | { |
@@ -169,10 +198,18 @@ namespace OpenSim.Region.Environment.Modules.Avatar.Inventory.Archiver | |||
169 | } | 198 | } |
170 | else | 199 | else |
171 | { | 200 | { |
172 | //Load the item | ||
173 | InventoryItemBase item = loadInvItem(filePath, m_asciiEncoding.GetString(data)); | 201 | InventoryItemBase item = loadInvItem(filePath, m_asciiEncoding.GetString(data)); |
202 | |||
174 | if (item != null) | 203 | if (item != null) |
175 | { | 204 | { |
205 | item.Creator = userProfile.ID; | ||
206 | item.Owner = userProfile.ID; | ||
207 | |||
208 | // Reset folder ID to the one in which we want to load it | ||
209 | // TODO: Properly restore entire folder structure. At the moment all items are dumped in this | ||
210 | // single folder no matter where in the saved folder structure they are. | ||
211 | item.Folder = inventoryFolder.ID; | ||
212 | |||
176 | userInfo.AddItem(item); | 213 | userInfo.AddItem(item); |
177 | successfulItemRestores++; | 214 | successfulItemRestores++; |
178 | } | 215 | } |