mirror of
https://github.com/opensim/opensim.git
synced 2026-08-10 03:06:05 +08:00
Committing partial work on passing folders across instances. This may crash.
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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.
|
||||
///
|
||||
|
||||
Reference in New Issue
Block a user