diff options
author | Teravus Ovares (Dan Olivares) | 2009-08-25 16:13:02 -0400 |
---|---|---|
committer | Teravus Ovares (Dan Olivares) | 2009-08-25 16:13:02 -0400 |
commit | a7917b428a6bc3c9e33da64879b9e473516540a3 (patch) | |
tree | 2c38d9c33c4977a3d0356912915082a8bd568a23 /OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | |
parent | Patch from jhurliman to HttpServer (diff) | |
parent | Implemented osPenCap, that sets EndCap and StartCap to Pen. This allows using... (diff) | |
download | opensim-SC_OLD-a7917b428a6bc3c9e33da64879b9e473516540a3.zip opensim-SC_OLD-a7917b428a6bc3c9e33da64879b9e473516540a3.tar.gz opensim-SC_OLD-a7917b428a6bc3c9e33da64879b9e473516540a3.tar.bz2 opensim-SC_OLD-a7917b428a6bc3c9e33da64879b9e473516540a3.tar.xz |
Merge branch 'master' of ssh://MyConnection/var/git/opensim
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | 175 |
1 files changed, 141 insertions, 34 deletions
diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index 5d94eac..a2261ba 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs | |||
@@ -178,30 +178,36 @@ namespace OpenSim.Services.Connectors | |||
178 | catch (Exception e) | 178 | catch (Exception e) |
179 | { | 179 | { |
180 | // Maybe we're talking to an old inventory server. Try this other thing. | 180 | // Maybe we're talking to an old inventory server. Try this other thing. |
181 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}. Trying RootFolders.", | 181 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1} (old sever?). Trying GetInventory.", |
182 | e.Source, e.Message); | 182 | e.Source, e.Message); |
183 | 183 | ||
184 | try | 184 | try |
185 | { | 185 | { |
186 | folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( | 186 | InventoryCollection inventory = SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( |
187 | "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); | 187 | "POST", m_ServerURI + "/GetInventory/", new Guid(userID), sessionID.ToString(), userID.ToString()); |
188 | folders = inventory.Folders; | ||
188 | } | 189 | } |
189 | catch (Exception ex) | 190 | catch (Exception ex) |
190 | { | 191 | { |
191 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", | 192 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetInventory operation also failed, {0} {1}. Giving up.", |
192 | e.Source, ex.Message); | 193 | e.Source, ex.Message); |
193 | } | 194 | } |
194 | 195 | ||
195 | if ((folders != null) && (folders.Count > 0)) | 196 | if ((folders != null) && (folders.Count > 0)) |
196 | { | 197 | { |
197 | dFolders[AssetType.Folder] = folders[0]; // Root folder is the first one | 198 | m_log.DebugFormat("[INVENTORY CONNECTOR]: Received entire inventory ({0} folders) for user {1}", |
198 | folders.RemoveAt(0); | 199 | folders.Count, userID); |
199 | foreach (InventoryFolderBase f in folders) | 200 | foreach (InventoryFolderBase f in folders) |
200 | { | 201 | { |
201 | if ((f.Type != (short)AssetType.Folder) && (f.Type != (short)AssetType.Unknown)) | 202 | if ((f.Type != (short)AssetType.Folder) && (f.Type != (short)AssetType.Unknown)) |
202 | dFolders[(AssetType)f.Type] = f; | 203 | dFolders[(AssetType)f.Type] = f; |
203 | } | 204 | } |
204 | 205 | ||
206 | UUID rootFolderID = dFolders[AssetType.Animation].ParentID; | ||
207 | InventoryFolderBase rootFolder = new InventoryFolderBase(rootFolderID, new UUID(userID)); | ||
208 | rootFolder = QueryFolder(userID, rootFolder, sessionID); | ||
209 | dFolders[AssetType.Folder] = rootFolder; | ||
210 | m_log.DebugFormat("[INVENTORY CONNECTOR]: {0} system folders for user {1}", dFolders.Count, userID); | ||
205 | return dFolders; | 211 | return dFolders; |
206 | } | 212 | } |
207 | } | 213 | } |
@@ -223,51 +229,56 @@ namespace OpenSim.Services.Connectors | |||
223 | return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( | 229 | return SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( |
224 | "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); | 230 | "POST", m_ServerURI + "/GetFolderContent/", folderID.Guid, sessionID.ToString(), userID.ToString()); |
225 | } | 231 | } |
232 | catch (TimeoutException e) | ||
233 | { | ||
234 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation to {0} timed out {0} {1}.", m_ServerURI, | ||
235 | e.Source, e.Message); | ||
236 | } | ||
226 | catch (Exception e) | 237 | catch (Exception e) |
227 | { | 238 | { |
228 | // Maybe we're talking to an old inventory server. Try this other thing. | 239 | // Maybe we're talking to an old inventory server. Try this other thing. |
229 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}. Trying RootFolders and GetItems.", | 240 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation failed, {0} {1} (old server?). Trying GetInventory.", |
230 | e.Source, e.Message); | 241 | e.Source, e.Message); |
231 | 242 | ||
243 | InventoryCollection inventory; | ||
232 | List<InventoryFolderBase> folders = null; | 244 | List<InventoryFolderBase> folders = null; |
233 | try | 245 | try |
234 | { | 246 | { |
235 | folders = SynchronousRestSessionObjectPoster<Guid, List<InventoryFolderBase>>.BeginPostObject( | 247 | inventory = SynchronousRestSessionObjectPoster<Guid, InventoryCollection>.BeginPostObject( |
236 | "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); | 248 | "POST", m_ServerURI + "/GetInventory/", new Guid(userID), sessionID.ToString(), userID.ToString()); |
249 | if (inventory != null) | ||
250 | folders = inventory.Folders; | ||
237 | } | 251 | } |
238 | catch (Exception ex) | 252 | catch (Exception ex) |
239 | { | 253 | { |
240 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", | 254 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetInventory operation also failed, {0} {1}. Giving up.", |
241 | e.Source, ex.Message); | 255 | e.Source, ex.Message); |
256 | return new InventoryCollection(); | ||
242 | } | 257 | } |
243 | 258 | ||
244 | if ((folders != null) && (folders.Count > 0)) | 259 | if ((folders != null) && (folders.Count > 0)) |
245 | { | 260 | { |
246 | folders = folders.FindAll(delegate (InventoryFolderBase f) { return f.ParentID == folderID ; }); | 261 | m_log.DebugFormat("[INVENTORY CONNECTOR]: Received entire inventory ({0} folders) for user {1}", |
247 | 262 | folders.Count, userID); | |
248 | try | ||
249 | { | ||
250 | List<InventoryItemBase> items = SynchronousRestSessionObjectPoster<Guid, List<InventoryItemBase>>.BeginPostObject( | ||
251 | "POST", m_ServerURI + "/GetItems/", folderID.Guid, sessionID.ToString(), userID.ToString()); | ||
252 | 263 | ||
253 | if (items != null) | 264 | folders = folders.FindAll(delegate(InventoryFolderBase f) { return f.ParentID == folderID; }); |
254 | { | 265 | List<InventoryItemBase> items = inventory.Items; |
255 | InventoryCollection result = new InventoryCollection(); | 266 | if (items != null) |
256 | result.Folders = folders; | ||
257 | result.Items = items; | ||
258 | result.UserID = new UUID(userID); | ||
259 | return result; | ||
260 | } | ||
261 | } | ||
262 | catch (Exception ex) | ||
263 | { | 267 | { |
264 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: QueryFolder and GetItems operation failed, {0} {1}. Give up.", | 268 | items = items.FindAll(delegate(InventoryItemBase i) { return i.Folder == folderID; }); |
265 | e.Source, ex.Message); | ||
266 | } | 269 | } |
270 | |||
271 | inventory.Items = items; | ||
272 | inventory.Folders = folders; | ||
273 | return inventory; | ||
267 | } | 274 | } |
268 | } | 275 | } |
269 | 276 | ||
270 | return null; | 277 | InventoryCollection nullCollection = new InventoryCollection(); |
278 | nullCollection.Folders = new List<InventoryFolderBase>(); | ||
279 | nullCollection.Items = new List<InventoryItemBase>(); | ||
280 | nullCollection.UserID = new UUID(userID); | ||
281 | return nullCollection; | ||
271 | } | 282 | } |
272 | 283 | ||
273 | public bool AddFolder(string userID, InventoryFolderBase folder, UUID sessionID) | 284 | public bool AddFolder(string userID, InventoryFolderBase folder, UUID sessionID) |
@@ -302,6 +313,25 @@ namespace OpenSim.Services.Connectors | |||
302 | return false; | 313 | return false; |
303 | } | 314 | } |
304 | 315 | ||
316 | public bool DeleteFolders(string userID, List<UUID> folderIDs, UUID sessionID) | ||
317 | { | ||
318 | try | ||
319 | { | ||
320 | List<Guid> guids = new List<Guid>(); | ||
321 | foreach (UUID u in folderIDs) | ||
322 | guids.Add(u.Guid); | ||
323 | return SynchronousRestSessionObjectPoster<List<Guid>, bool>.BeginPostObject( | ||
324 | "POST", m_ServerURI + "/DeleteFolders/", guids, sessionID.ToString(), userID); | ||
325 | } | ||
326 | catch (Exception e) | ||
327 | { | ||
328 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: Delete inventory folders operation failed, {0} {1}", | ||
329 | e.Source, e.Message); | ||
330 | } | ||
331 | |||
332 | return false; | ||
333 | } | ||
334 | |||
305 | public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID) | 335 | public bool MoveFolder(string userID, InventoryFolderBase folder, UUID sessionID) |
306 | { | 336 | { |
307 | try | 337 | try |
@@ -334,6 +364,23 @@ namespace OpenSim.Services.Connectors | |||
334 | return false; | 364 | return false; |
335 | } | 365 | } |
336 | 366 | ||
367 | public List<InventoryItemBase> GetFolderItems(string userID, UUID folderID, UUID sessionID) | ||
368 | { | ||
369 | try | ||
370 | { | ||
371 | InventoryFolderBase folder = new InventoryFolderBase(folderID, new UUID(userID)); | ||
372 | return SynchronousRestSessionObjectPoster<InventoryFolderBase, List<InventoryItemBase>>.BeginPostObject( | ||
373 | "POST", m_ServerURI + "/GetItems/", folder, sessionID.ToString(), userID); | ||
374 | } | ||
375 | catch (Exception e) | ||
376 | { | ||
377 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: Get folder items operation failed, {0} {1}", | ||
378 | e.Source, e.Message); | ||
379 | } | ||
380 | |||
381 | return null; | ||
382 | } | ||
383 | |||
337 | public bool AddItem(string userID, InventoryItemBase item, UUID sessionID) | 384 | public bool AddItem(string userID, InventoryItemBase item, UUID sessionID) |
338 | { | 385 | { |
339 | try | 386 | try |
@@ -366,12 +413,72 @@ namespace OpenSim.Services.Connectors | |||
366 | return false; | 413 | return false; |
367 | } | 414 | } |
368 | 415 | ||
369 | public bool DeleteItem(string userID, InventoryItemBase item, UUID sessionID) | 416 | /** |
417 | * MoveItems Async group | ||
418 | */ | ||
419 | |||
420 | delegate void MoveItemsDelegate(string userID, List<InventoryItemBase> items, UUID sessionID); | ||
421 | |||
422 | private void MoveItemsAsync(string userID, List<InventoryItemBase> items, UUID sessionID) | ||
370 | { | 423 | { |
424 | if (items == null) | ||
425 | { | ||
426 | m_log.WarnFormat("[INVENTORY CONNECTOR]: request to move items got a null list."); | ||
427 | return; | ||
428 | } | ||
429 | |||
371 | try | 430 | try |
372 | { | 431 | { |
373 | return SynchronousRestSessionObjectPoster<InventoryItemBase, bool>.BeginPostObject( | 432 | //SynchronousRestSessionObjectPoster<List<InventoryItemBase>, bool>.BeginPostObject( |
374 | "POST", m_ServerURI + "/DeleteItem/", item, sessionID.ToString(), item.Owner.ToString()); | 433 | // "POST", m_ServerURI + "/MoveItems/", items, sessionID.ToString(), userID.ToString()); |
434 | |||
435 | //// Success | ||
436 | //return; | ||
437 | string uri = m_ServerURI + "/inventory/" + userID; | ||
438 | if (SynchronousRestObjectRequester. | ||
439 | MakeRequest<List<InventoryItemBase>, bool>("PUT", uri, items)) | ||
440 | m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster succeeded {1}", items.Count, uri); | ||
441 | else | ||
442 | m_log.DebugFormat("[INVENTORY CONNECTOR]: move {0} items poster failed {1}", items.Count, uri); ; | ||
443 | |||
444 | return; | ||
445 | |||
446 | } | ||
447 | catch (Exception e) | ||
448 | { | ||
449 | m_log.ErrorFormat("[INVENTORY CONNECTOR]: Move inventory items operation failed, {0} {1} (old server?). Trying slow way.", | ||
450 | e.Source, e.Message); | ||
451 | } | ||
452 | |||
453 | foreach (InventoryItemBase item in items) | ||
454 | { | ||
455 | InventoryItemBase itm = this.QueryItem(userID, item, sessionID); | ||
456 | itm.Name = item.Name; | ||
457 | itm.Folder = item.Folder; | ||
458 | this.UpdateItem(userID, itm, sessionID); | ||
459 | } | ||
460 | } | ||
461 | |||
462 | private void MoveItemsCompleted(IAsyncResult iar) | ||
463 | { | ||
464 | } | ||
465 | |||
466 | public bool MoveItems(string userID, List<InventoryItemBase> items, UUID sessionID) | ||
467 | { | ||
468 | MoveItemsDelegate d = MoveItemsAsync; | ||
469 | d.BeginInvoke(userID, items, sessionID, MoveItemsCompleted, d); | ||
470 | return true; | ||
471 | } | ||
472 | |||
473 | public bool DeleteItems(string userID, List<UUID> items, UUID sessionID) | ||
474 | { | ||
475 | try | ||
476 | { | ||
477 | List<Guid> guids = new List<Guid>(); | ||
478 | foreach (UUID u in items) | ||
479 | guids.Add(u.Guid); | ||
480 | return SynchronousRestSessionObjectPoster<List<Guid>, bool>.BeginPostObject( | ||
481 | "POST", m_ServerURI + "/DeleteItem/", guids, sessionID.ToString(), userID); | ||
375 | } | 482 | } |
376 | catch (Exception e) | 483 | catch (Exception e) |
377 | { | 484 | { |
@@ -398,12 +505,12 @@ namespace OpenSim.Services.Connectors | |||
398 | return null; | 505 | return null; |
399 | } | 506 | } |
400 | 507 | ||
401 | public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID sessionID) | 508 | public InventoryFolderBase QueryFolder(string userID, InventoryFolderBase folder, UUID sessionID) |
402 | { | 509 | { |
403 | try | 510 | try |
404 | { | 511 | { |
405 | return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject( | 512 | return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject( |
406 | "POST", m_ServerURI + "/QueryFolder/", item, sessionID.ToString(), item.Owner.ToString()); | 513 | "POST", m_ServerURI + "/QueryFolder/", folder, sessionID.ToString(), userID); |
407 | } | 514 | } |
408 | catch (Exception e) | 515 | catch (Exception e) |
409 | { | 516 | { |