Committing partial work on passing folders across instances. This may crash.

This commit is contained in:
Melanie Thielker
2009-03-23 00:11:34 +00:00
parent f86c13f48e
commit 412112acba
16 changed files with 203 additions and 2 deletions

View File

@@ -340,6 +340,29 @@ namespace OpenSim.Region.Communications.Hypergrid
return null;
}
public InventoryFolderBase QueryFolder(InventoryFolderBase item, UUID session_id)
{
if (IsLocalStandaloneUser(item.Owner))
{
return base.QueryFolder(item);
}
try
{
string invServ = GetUserInventoryURI(item.Owner);
return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject(
"POST", invServ + "/QueryFolder/", item, session_id.ToString(), item.Owner.ToString());
}
catch (WebException e)
{
m_log.ErrorFormat("[HGrid INVENTORY SERVICE]: Query inventory item operation failed, {0} {1}",
e.Source, e.Message);
}
return null;
}
#endregion
#region Methods common to ISecureInventoryService and IInventoryService

View File

@@ -312,6 +312,22 @@ namespace OpenSim.Region.Communications.OGS1
return null;
}
public InventoryFolderBase QueryFolder(InventoryFolderBase item)
{
try
{
return SynchronousRestObjectPoster.BeginPostObject<InventoryFolderBase, InventoryFolderBase>(
"POST", _inventoryServerUrl + "/QueryFolder/", item);
}
catch (WebException e)
{
m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: Query inventory item operation failed, {0} {1}",
e.Source, e.Message);
}
return null;
}
public bool HasInventoryForUser(UUID userID)
{
return false;

View File

@@ -312,6 +312,22 @@ namespace OpenSim.Region.Communications.OGS1
return null;
}
public InventoryFolderBase QueryFolder(InventoryFolderBase item, UUID session_id)
{
try
{
return SynchronousRestSessionObjectPoster<InventoryFolderBase, InventoryFolderBase>.BeginPostObject(
"POST", _inventoryServerUrl + "/QueryFolder/", item, session_id.ToString(), item.Owner.ToString());
}
catch (WebException e)
{
m_log.ErrorFormat("[OGS1 INVENTORY SERVICE]: Query inventory item operation failed, {0} {1}",
e.Source, e.Message);
}
return null;
}
public bool HasInventoryForUser(UUID userID)
{
return false;

View File

@@ -426,9 +426,38 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer
if (AssetType.Folder == assetType)
{
// Folders not implemented yet
UUID folderID = new UUID(msg.binaryBucket, 1);
InventoryFolderBase folder = new InventoryFolderBase();
folder.ID = folderID;
folder.Owner = user.ControllingClient.AgentId;
// Fetch from database
//
return;
if (!userInfo.QueryFolder(folder))
{
m_log.Debug("[INVENTORY TRANSFER] Can't find folder to give");
return;
}
// Get folder info
//
InventoryFolderImpl folderInfo = userInfo.RootFolder.FindFolder(folder.ID);
if (folderInfo == null)
{
m_log.Debug("[INVENTORY TRANSFER] Can't retrieve folder to give");
return;
}
user.ControllingClient.SendBulkUpdateInventory(folderInfo);
// Deliver message
//
user.ControllingClient.SendInstantMessage(
new UUID(msg.fromAgentID), msg.message,
new UUID(msg.toAgentID),
msg.fromAgentName, msg.dialog, msg.timestamp,
folderID, false, msg.binaryBucket);
}
else
{

View File

@@ -618,6 +618,13 @@ namespace OpenSim.Region.Framework.Scenes
return null;
}
if (!recipientUserInfo.HasReceivedInventory)
{
recipientUserInfo.FetchInventory();
if (!WaitForInventory(recipientUserInfo))
return null;
}
if (recipientParentFolderId == UUID.Zero)
recipientParentFolderId = recipientUserInfo.RootFolder.ID;