Added two new methods to IIventoryService -- GetFolderForType and GetFolderContent. Some meat to it, but not completed. None of this code is called anywhere yet.

arthursv
Diva Canto 2009-08-10 20:31:51 -07:00
parent 9f95ec4998
commit cdcbc48534
10 changed files with 261 additions and 7 deletions

View File

@ -497,6 +497,16 @@ namespace OpenSim.Framework.Communications.Tests
{
}
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
return null;
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{
return null;
}
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{
return null;

View File

@ -201,6 +201,32 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
}
}
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
if (IsLocalGridUser(userID))
return m_GridService.GetFolderForType(userID, type);
else
{
UUID sessionID = GetSessionID(userID);
string uri = GetUserInventoryURI(userID) + "/" + userID.ToString();
// !!!!!!
return null;
//return m_HGService.GetFolderForType(uri, sessionID, type);
}
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{
if (IsLocalGridUser(userID))
return m_GridService.GetFolderContent(userID, folderID);
else
{
UUID sessionID = GetSessionID(userID);
string uri = GetUserInventoryURI(userID) + "/" + userID.ToString();
return m_HGService.GetFolderContent(uri, folderID, sessionID);
}
}
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{
return new List<InventoryItemBase>();

View File

@ -176,6 +176,17 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
m_InventoryService.GetUserInventory(userID, callback);
}
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
return m_InventoryService.GetFolderForType(userID, type);
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{
return m_InventoryService.GetFolderContent(userID, folderID);
}
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{
return m_InventoryService.GetFolderItems(userID, folderID);

View File

@ -168,6 +168,44 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory
}
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
//UUID sessionID = GetSessionID(userID);
//List<InventoryFolderBase> sysFolders;
//try
//{
// sysFolders = m_RemoteConnector.GetSystemFolders(userID.ToString(), sessionID);
//}
//catch (Exception e)
//{
// m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}",
// e.Source, e.Message);
//}
// PLACEHOLDER UNTIL CACHE IS DONE
return null;
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{
UUID sessionID = GetSessionID(userID);
try
{
return m_RemoteConnector.GetFolderContent(userID.ToString(), folderID, sessionID);
}
catch (Exception e)
{
m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderContent operation failed, {0} {1}",
e.Source, e.Message);
}
InventoryCollection nullCollection = new InventoryCollection();
nullCollection.Folders = new List<InventoryFolderBase>();
nullCollection.Items = new List<InventoryItemBase>();
nullCollection.UserID = userID;
return nullCollection;
}
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{
return new List<InventoryItemBase>();

View File

@ -120,6 +120,48 @@ namespace OpenSim.Services.Connectors.Inventory
}
/// <summary>
/// Gets the user folder for the given folder-type
/// </summary>
/// <param name="userID"></param>
/// <param name="type"></param>
/// <returns></returns>
public List<InventoryFolderBase> GetSystemFolders(string id, UUID sessionID)
{
m_log.Debug("[HGInventory]: GetSystemFolders " + id);
string url = string.Empty;
string userID = string.Empty;
if (StringToUrlAndUserID(id, out url, out userID))
{
ISessionAuthInventoryService connector = GetConnector(url);
return connector.GetSystemFolders(userID, sessionID);
}
return new List<InventoryFolderBase>();
}
/// <summary>
/// Gets everything (folders and items) inside a folder
/// </summary>
/// <param name="userId"></param>
/// <param name="folderID"></param>
/// <returns></returns>
public InventoryCollection GetFolderContent(string id, UUID folderID, UUID sessionID)
{
m_log.Debug("[HGInventory]: GetSystemFolders " + id);
string url = string.Empty;
string userID = string.Empty;
if (StringToUrlAndUserID(id, out url, out userID))
{
ISessionAuthInventoryService connector = GetConnector(url);
return connector.GetFolderContent(userID, folderID, sessionID);
}
return null;
}
public bool AddFolder(string id, InventoryFolderBase folder, UUID sessionID)
{
string url = string.Empty;

View File

@ -25,6 +25,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
using System.Collections.Generic;
using OpenSim.Framework;
using OpenSim.Services.Interfaces;
using OpenMetaverse;
@ -50,6 +51,22 @@ namespace OpenSim.Services.Connectors
/// <param name="callback"></param>
void GetUserInventory(string userID, UUID session_id, InventoryReceiptCallback callback);
/// <summary>
/// Gets the user folder for the given folder-type
/// </summary>
/// <param name="userID"></param>
/// <param name="type"></param>
/// <returns></returns>
List<InventoryFolderBase> GetSystemFolders(string userID, UUID session_id);
/// <summary>
/// Gets everything (folders and items) inside a folder
/// </summary>
/// <param name="userId"></param>
/// <param name="folderID"></param>
/// <returns></returns>
InventoryCollection GetFolderContent(string userID, UUID folderID, UUID session_id);
/// <summary>
/// Add a new folder to the user's inventory
/// </summary>

View File

@ -155,6 +155,50 @@ namespace OpenSim.Services.Connectors
}
}
/// <summary>
/// Gets the user folder for the given folder-type
/// </summary>
/// <param name="userID"></param>
/// <param name="type"></param>
/// <returns></returns>
public List<InventoryFolderBase> GetSystemFolders(string userID, UUID sessionID)
{
try
{
return SynchronousRestSessionObjectPoster<string, List<InventoryFolderBase>>.BeginPostObject(
"GET", m_ServerURI + "/SystemFolders/", userID, sessionID.ToString(), userID.ToString());
}
catch (Exception e)
{
m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}",
e.Source, e.Message);
}
return new List<InventoryFolderBase>();
}
/// <summary>
/// Gets everything (folders and items) inside a folder
/// </summary>
/// <param name="userId"></param>
/// <param name="folderID"></param>
/// <returns></returns>
public InventoryCollection GetFolderContent(string userID, UUID folderID, UUID sessionID)
{
try
{
return SynchronousRestSessionObjectPoster<UUID, InventoryCollection>.BeginPostObject(
"GET", m_ServerURI + "/GetFolderContents/", folderID, sessionID.ToString(), userID.ToString());
}
catch (Exception e)
{
m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetFolderForType operation failed, {0} {1}",
e.Source, e.Message);
}
return null;
}
public bool AddFolder(string userID, InventoryFolderBase folder, UUID sessionID)
{
try

View File

@ -106,6 +106,16 @@ namespace OpenSim.Services.Connectors
{
}
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
return null;
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{
return null;
}
public List<InventoryItemBase> GetFolderItems(UUID userID, UUID folderID)
{
return null;

View File

@ -69,6 +69,29 @@ namespace OpenSim.Services.Interfaces
/// <param name="callback"></param>
void GetUserInventory(UUID userID, InventoryReceiptCallback callback);
/// <summary>
/// Retrieve the root inventory folder for the given user.
/// </summary>
/// <param name="userID"></param>
/// <returns>null if no root folder was found</returns>
InventoryFolderBase GetRootFolder(UUID userID);
/// <summary>
/// Gets the user folder for the given folder-type
/// </summary>
/// <param name="userID"></param>
/// <param name="type"></param>
/// <returns></returns>
InventoryFolderBase GetFolderForType(UUID userID, AssetType type);
/// <summary>
/// Gets everything (folders and items) inside a folder
/// </summary>
/// <param name="userId"></param>
/// <param name="folderID"></param>
/// <returns></returns>
InventoryCollection GetFolderContent(UUID userID, UUID folderID);
/// <summary>
/// Gets the items inside a folder
/// </summary>
@ -137,13 +160,6 @@ namespace OpenSim.Services.Interfaces
/// <returns></returns>
bool HasInventoryForUser(UUID userID);
/// <summary>
/// Retrieve the root inventory folder for the given user.
/// </summary>
/// <param name="userID"></param>
/// <returns>null if no root folder was found</returns>
InventoryFolderBase GetRootFolder(UUID userID);
/// <summary>
/// Get the active gestures of the agent.
/// </summary>

View File

@ -233,6 +233,46 @@ namespace OpenSim.Services.InventoryService
callback.BeginInvoke(folders, items, null, null);
}
public InventoryCollection GetFolderContent(UUID userID, UUID folderID)
{
m_log.Info("[INVENTORY SERVICE]: Processing request for folder " + folderID);
// Uncomment me to simulate a slow responding inventory server
//Thread.Sleep(16000);
InventoryCollection invCollection = new InventoryCollection();
List<InventoryItemBase> items = GetFolderItems(userID, folderID);
List<InventoryFolderBase> folders = RequestSubFolders(folderID);
invCollection.UserID = userID;
invCollection.Folders = folders;
invCollection.Items = items;
m_log.DebugFormat("[INVENTORY SERVICE]: Found {0} items and {1} folders", items.Count, folders.Count);
return invCollection;
}
public InventoryFolderBase GetFolderForType(UUID userID, AssetType type)
{
InventoryFolderBase root = m_Database.getUserRootFolder(userID);
if (root != null)
{
List<InventoryFolderBase> folders = RequestSubFolders(root.ID);
foreach (InventoryFolderBase folder in folders)
{
if (folder.Type == (short)type)
return folder;
}
}
// we didn't find any folder of that type. Return the root folder
// hopefully the root folder is not null. If it is, too bad
return root;
}
public List<InventoryItemBase> GetActiveGestures(UUID userId)
{
List<InventoryItemBase> activeGestures = new List<InventoryItemBase>();