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

@@ -37,6 +37,7 @@ namespace OpenSim.Framework.Communications.Cache
internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo);
internal delegate void DeleteItemDelegate(UUID itemID);
internal delegate void QueryItemDelegate(UUID itemID);
internal delegate void QueryFolderDelegate(UUID folderID);
internal delegate void CreateFolderDelegate(string folderName, UUID folderID, ushort folderType, UUID parentID);
internal delegate void MoveFolderDelegate(UUID folderID, UUID parentID);
@@ -819,6 +820,56 @@ namespace OpenSim.Framework.Communications.Cache
return false;
}
public bool QueryFolder(InventoryFolderBase folder)
{
if (m_hasReceivedInventory)
{
InventoryFolderBase invFolder = RootFolder.FindFolder(folder.ID);
if (invFolder != null)
{
// Folder is in local cache, just update client
//
return true;
}
InventoryFolderBase folderInfo = null;
if (m_commsManager.SecureInventoryService != null)
{
folderInfo = m_commsManager.SecureInventoryService.QueryFolder(folder, m_session_id);
}
else
{
folderInfo = m_commsManager.InventoryService.QueryFolder(folder);
}
if (folderInfo != null)
{
InventoryFolderImpl createdFolder = RootFolder.CreateChildFolder(folderInfo.ID, folderInfo.Name, (ushort)folderInfo.Type);
createdFolder.Version = folderInfo.Version;
createdFolder.Owner = folderInfo.Owner;
createdFolder.ParentID = folderInfo.ParentID;
return true;
}
return false;
}
else
{
AddRequest(
new InventoryRequest(
Delegate.CreateDelegate(typeof(QueryFolderDelegate), this, "QueryFolder"),
new object[] { folder.ID }));
return true;
}
return false;
}
}
/// <summary>

View File

@@ -112,6 +112,14 @@ namespace OpenSim.Framework.Communications
/// <returns>true if the item was found in local cache</returns>
InventoryItemBase QueryItem(InventoryItemBase item);
/// <summary>
/// Query the server for a folder that may have been added by
/// another region
/// </summary>
/// <param name="folder"></param>
/// <returns>true if the folder was found in local cache</returns>
InventoryFolderBase QueryFolder(InventoryFolderBase folder);
/// <summary>
/// Does the given user have an inventory structure?
/// </summary>

View File

@@ -98,6 +98,8 @@ namespace OpenSim.Framework.Communications
InventoryItemBase QueryItem(InventoryItemBase item, UUID session_id);
InventoryFolderBase QueryFolder(InventoryFolderBase item, UUID session_id);
/// <summary>
/// Does the given user have an inventory structure?
/// </summary>

View File

@@ -292,6 +292,20 @@ namespace OpenSim.Framework.Communications
return null;
}
public virtual InventoryFolderBase QueryFolder(InventoryFolderBase item)
{
foreach (IInventoryDataPlugin plugin in m_plugins)
{
InventoryFolderBase result = plugin.queryInventoryFolder(item.ID);
if (result != null)
{
return result;
}
}
return null;
}
/// <summary>
/// Purge a folder of all items items and subfolders.
///