diff options
Diffstat (limited to 'OpenSim/Server')
-rw-r--r-- | OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs | 74 |
1 files changed, 72 insertions, 2 deletions
diff --git a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs index 0288fa6..4f01e36 100644 --- a/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/XInventoryInConnector.cs | |||
@@ -41,7 +41,9 @@ using OpenSim.Server.Handlers.Base; | |||
41 | using log4net; | 41 | using log4net; |
42 | using OpenMetaverse; | 42 | using OpenMetaverse; |
43 | 43 | ||
44 | namespace OpenSim.Server.Handlers.Asset | 44 | using System.Threading; |
45 | |||
46 | namespace OpenSim.Server.Handlers.Inventory | ||
45 | { | 47 | { |
46 | public class XInventoryInConnector : ServiceConnector | 48 | public class XInventoryInConnector : ServiceConnector |
47 | { | 49 | { |
@@ -123,6 +125,8 @@ namespace OpenSim.Server.Handlers.Asset | |||
123 | return HandleGetFolderForType(request); | 125 | return HandleGetFolderForType(request); |
124 | case "GETFOLDERCONTENT": | 126 | case "GETFOLDERCONTENT": |
125 | return HandleGetFolderContent(request); | 127 | return HandleGetFolderContent(request); |
128 | case "GETMULTIPLEFOLDERSCONTENT": | ||
129 | return HandleGetMultipleFoldersContent(request); | ||
126 | case "GETFOLDERITEMS": | 130 | case "GETFOLDERITEMS": |
127 | return HandleGetFolderItems(request); | 131 | return HandleGetFolderItems(request); |
128 | case "ADDFOLDER": | 132 | case "ADDFOLDER": |
@@ -284,6 +288,8 @@ namespace OpenSim.Server.Handlers.Asset | |||
284 | InventoryCollection icoll = m_InventoryService.GetFolderContent(principal, folderID); | 288 | InventoryCollection icoll = m_InventoryService.GetFolderContent(principal, folderID); |
285 | if (icoll != null) | 289 | if (icoll != null) |
286 | { | 290 | { |
291 | result["FID"] = icoll.FolderID.ToString(); | ||
292 | result["VERSION"] = icoll.Version.ToString(); | ||
287 | Dictionary<string, object> folders = new Dictionary<string, object>(); | 293 | Dictionary<string, object> folders = new Dictionary<string, object>(); |
288 | int i = 0; | 294 | int i = 0; |
289 | if (icoll.Folders != null) | 295 | if (icoll.Folders != null) |
@@ -314,7 +320,71 @@ namespace OpenSim.Server.Handlers.Asset | |||
314 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | 320 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); |
315 | } | 321 | } |
316 | 322 | ||
317 | byte[] HandleGetFolderItems(Dictionary<string,object> request) | 323 | byte[] HandleGetMultipleFoldersContent(Dictionary<string, object> request) |
324 | { | ||
325 | Dictionary<string, object> resultSet = new Dictionary<string, object>(); | ||
326 | UUID principal = UUID.Zero; | ||
327 | UUID.TryParse(request["PRINCIPAL"].ToString(), out principal); | ||
328 | string folderIDstr = request["FOLDERS"].ToString(); | ||
329 | int count = 0; | ||
330 | Int32.TryParse(request["COUNT"].ToString(), out count); | ||
331 | |||
332 | UUID[] fids = new UUID[count]; | ||
333 | string[] uuids = folderIDstr.Split(','); | ||
334 | int i = 0; | ||
335 | foreach (string id in uuids) | ||
336 | { | ||
337 | UUID fid = UUID.Zero; | ||
338 | if (UUID.TryParse(id, out fid)) | ||
339 | fids[i] = fid; | ||
340 | i += 1; | ||
341 | } | ||
342 | |||
343 | count = 0; | ||
344 | InventoryCollection[] icollList = m_InventoryService.GetMultipleFoldersContent(principal, fids); | ||
345 | if (icollList != null && icollList.Length > 0) | ||
346 | { | ||
347 | foreach (InventoryCollection icoll in icollList) | ||
348 | { | ||
349 | Dictionary<string, object> result = new Dictionary<string, object>(); | ||
350 | result["FID"] = icoll.FolderID.ToString(); | ||
351 | result["VERSION"] = icoll.Version.ToString(); | ||
352 | result["OWNER"] = icoll.OwnerID.ToString(); | ||
353 | Dictionary<string, object> folders = new Dictionary<string, object>(); | ||
354 | i = 0; | ||
355 | if (icoll.Folders != null) | ||
356 | { | ||
357 | foreach (InventoryFolderBase f in icoll.Folders) | ||
358 | { | ||
359 | folders["folder_" + i.ToString()] = EncodeFolder(f); | ||
360 | i++; | ||
361 | } | ||
362 | result["FOLDERS"] = folders; | ||
363 | } | ||
364 | i = 0; | ||
365 | if (icoll.Items != null) | ||
366 | { | ||
367 | Dictionary<string, object> items = new Dictionary<string, object>(); | ||
368 | foreach (InventoryItemBase it in icoll.Items) | ||
369 | { | ||
370 | items["item_" + i.ToString()] = EncodeItem(it); | ||
371 | i++; | ||
372 | } | ||
373 | result["ITEMS"] = items; | ||
374 | } | ||
375 | |||
376 | resultSet["F_" + fids[count++]] = result; | ||
377 | //m_log.DebugFormat("[XXX]: Sending {0} {1}", fids[count-1], icoll.FolderID); | ||
378 | } | ||
379 | } | ||
380 | |||
381 | string xmlString = ServerUtils.BuildXmlResponse(resultSet); | ||
382 | |||
383 | //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); | ||
384 | return Util.UTF8NoBomEncoding.GetBytes(xmlString); | ||
385 | } | ||
386 | |||
387 | byte[] HandleGetFolderItems(Dictionary<string, object> request) | ||
318 | { | 388 | { |
319 | Dictionary<string,object> result = new Dictionary<string,object>(); | 389 | Dictionary<string,object> result = new Dictionary<string,object>(); |
320 | UUID principal = UUID.Zero; | 390 | UUID principal = UUID.Zero; |