diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index bcf9d87423..b573a06cb1 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -178,30 +178,36 @@ namespace OpenSim.Services.Connectors catch (Exception e) { // Maybe we're talking to an old inventory server. Try this other thing. - m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}. Trying RootFolders.", + m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1} (old sever?). Trying GetInventory.", e.Source, e.Message); try { - folders = SynchronousRestSessionObjectPoster>.BeginPostObject( - "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); + InventoryCollection inventory = SynchronousRestSessionObjectPoster.BeginPostObject( + "POST", m_ServerURI + "/GetInventory/", new Guid(userID), sessionID.ToString(), userID.ToString()); + folders = inventory.Folders; } catch (Exception ex) { - m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", + m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetInventory operation also failed, {0} {1}. Giving up.", e.Source, ex.Message); } if ((folders != null) && (folders.Count > 0)) { - dFolders[AssetType.Folder] = folders[0]; // Root folder is the first one - folders.RemoveAt(0); + m_log.DebugFormat("[INVENTORY CONNECTOR]: Received entire inventory ({0} folders) for user {1}", + folders.Count, userID); foreach (InventoryFolderBase f in folders) { if ((f.Type != (short)AssetType.Folder) && (f.Type != (short)AssetType.Unknown)) dFolders[(AssetType)f.Type] = f; } + UUID rootFolderID = dFolders[AssetType.Animation].ParentID; + InventoryFolderBase rootFolder = new InventoryFolderBase(rootFolderID, new UUID(userID)); + rootFolder = QueryFolder(userID, rootFolder, sessionID); + dFolders[AssetType.Folder] = rootFolder; + m_log.DebugFormat("[INVENTORY CONNECTOR]: {0} system folders for user {1}", dFolders.Count, userID); return dFolders; } } @@ -226,48 +232,48 @@ namespace OpenSim.Services.Connectors catch (Exception e) { // Maybe we're talking to an old inventory server. Try this other thing. - m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}. Trying RootFolders and GetItems.", + m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation failed, {0} {1} (old server?). Trying GetInventory.", e.Source, e.Message); + InventoryCollection inventory; List folders = null; try { - folders = SynchronousRestSessionObjectPoster>.BeginPostObject( - "POST", m_ServerURI + "/RootFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); + inventory = SynchronousRestSessionObjectPoster.BeginPostObject( + "POST", m_ServerURI + "/GetInventory/", new Guid(userID), sessionID.ToString(), userID.ToString()); + if (inventory != null) + folders = inventory.Folders; } catch (Exception ex) { - m_log.ErrorFormat("[INVENTORY CONNECTOR]: RootFolders operation also failed, {0} {1}. Give up.", + m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetInventory operation also failed, {0} {1}. Giving up.", e.Source, ex.Message); + return new InventoryCollection(); } if ((folders != null) && (folders.Count > 0)) { - folders = folders.FindAll(delegate (InventoryFolderBase f) { return f.ParentID == folderID ; }); + m_log.DebugFormat("[INVENTORY CONNECTOR]: Received entire inventory ({0} folders) for user {1}", + folders.Count, userID); - try + folders = folders.FindAll(delegate(InventoryFolderBase f) { return f.ParentID == folderID; }); + List items = inventory.Items; + if (items != null) { - List items = SynchronousRestSessionObjectPoster>.BeginPostObject( - "POST", m_ServerURI + "/GetItems/", folderID.Guid, sessionID.ToString(), userID.ToString()); + items = items.FindAll(delegate(InventoryItemBase i) { return i.Folder == folderID; }); + } - if (items != null) - { - InventoryCollection result = new InventoryCollection(); - result.Folders = folders; - result.Items = items; - result.UserID = new UUID(userID); - return result; - } - } - catch (Exception ex) - { - m_log.ErrorFormat("[INVENTORY CONNECTOR]: QueryFolder and GetItems operation failed, {0} {1}. Give up.", - e.Source, ex.Message); - } + inventory.Items = items; + inventory.Folders = folders; + return inventory; } } - return null; + InventoryCollection nullCollection = new InventoryCollection(); + nullCollection.Folders = new List(); + nullCollection.Items = new List(); + nullCollection.UserID = new UUID(userID); + return nullCollection; } public bool AddFolder(string userID, InventoryFolderBase folder, UUID sessionID)