Add a QueryItem method to the inventory subsystem. Currently implemented for
MySQL only, stubs for the others. This allows updating the cache with a single item from the database.0.6.5-rc1
parent
2d387c25b8
commit
1121a214b9
|
@ -108,6 +108,12 @@ namespace OpenSim.Data
|
|||
/// <param name="item"></param>
|
||||
void deleteInventoryItem(UUID item);
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
InventoryItemBase queryInventoryItem(UUID item);
|
||||
|
||||
/// <summary>
|
||||
/// Adds a new folder specified by folder
|
||||
/// </summary>
|
||||
|
|
|
@ -530,6 +530,11 @@ namespace OpenSim.Data.MSSQL
|
|||
}
|
||||
}
|
||||
|
||||
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns all activated gesture-items in the inventory of the specified avatar.
|
||||
/// </summary>
|
||||
|
|
|
@ -539,6 +539,11 @@ namespace OpenSim.Data.MySQL
|
|||
}
|
||||
}
|
||||
|
||||
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||
{
|
||||
return getInventoryItem(itemID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new inventory folder
|
||||
/// </summary>
|
||||
|
|
|
@ -177,6 +177,11 @@ namespace OpenSim.Data.NHibernate
|
|||
|
||||
}
|
||||
|
||||
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Returns an inventory folder by its UUID
|
||||
/// </summary>
|
||||
|
|
|
@ -618,6 +618,11 @@ namespace OpenSim.Data.SQLite
|
|||
}
|
||||
}
|
||||
|
||||
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Delete all items in the specified folder
|
||||
/// </summary>
|
||||
|
|
|
@ -36,6 +36,7 @@ namespace OpenSim.Framework.Communications.Cache
|
|||
internal delegate void AddItemDelegate(InventoryItemBase itemInfo);
|
||||
internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo);
|
||||
internal delegate void DeleteItemDelegate(UUID itemID);
|
||||
internal delegate void QueryItemDelegate(UUID itemID);
|
||||
|
||||
internal delegate void CreateFolderDelegate(string folderName, UUID folderID, ushort folderType, UUID parentID);
|
||||
internal delegate void MoveFolderDelegate(UUID folderID, UUID parentID);
|
||||
|
@ -767,6 +768,47 @@ namespace OpenSim.Framework.Communications.Cache
|
|||
|
||||
return RootFolder.FindFolderForType(type);
|
||||
}
|
||||
|
||||
// Load additional items that other regions have put into the database
|
||||
// The item will be added tot he local cache. Returns true if the item
|
||||
// was found and can be sent to the client
|
||||
//
|
||||
public bool QueryItem(UUID itemID)
|
||||
{
|
||||
if (m_hasReceivedInventory)
|
||||
{
|
||||
InventoryItemBase item = RootFolder.FindItem(itemID);
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
// Item is in local cache, just update client
|
||||
//
|
||||
return true;
|
||||
}
|
||||
|
||||
InventoryItemBase itemInfo = m_commsManager.InventoryService.QueryItem(item);
|
||||
if (itemInfo != null)
|
||||
{
|
||||
InventoryFolderImpl folder = RootFolder.FindFolder(itemInfo.Folder);
|
||||
ItemReceive(itemInfo, folder);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
AddRequest(
|
||||
new InventoryRequest(
|
||||
Delegate.CreateDelegate(typeof(QueryItemDelegate), this, "QueryItem"),
|
||||
new object[] { itemID }));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
@ -104,6 +104,14 @@ namespace OpenSim.Framework.Communications
|
|||
/// <returns>true if the item was successfully deleted</returns>
|
||||
bool DeleteItem(InventoryItemBase item);
|
||||
|
||||
/// <summary>
|
||||
/// Query the server for an item that may have been added by
|
||||
/// another region
|
||||
/// </summary>
|
||||
/// <param name="item"></param>
|
||||
/// <returns>true if the item was found in local cache</returns>
|
||||
InventoryItemBase QueryItem(InventoryItemBase item);
|
||||
|
||||
/// <summary>
|
||||
/// Does the given user have an inventory structure?
|
||||
/// </summary>
|
||||
|
|
|
@ -278,6 +278,20 @@ namespace OpenSim.Framework.Communications
|
|||
return true;
|
||||
}
|
||||
|
||||
public virtual InventoryItemBase QueryItem(InventoryItemBase item)
|
||||
{
|
||||
foreach (IInventoryDataPlugin plugin in m_plugins)
|
||||
{
|
||||
InventoryItemBase result = plugin.queryInventoryItem(item.ID);
|
||||
if (result != null)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Purge a folder of all items items and subfolders.
|
||||
///
|
||||
|
|
|
@ -127,6 +127,10 @@ namespace OpenSim.Grid.InventoryServer
|
|||
new RestDeserialiseSecureHandler<InventoryItemBase, bool>(
|
||||
"POST", "/DeleteItem/", m_inventoryService.DeleteItem, m_inventoryService.CheckAuthSession));
|
||||
|
||||
m_httpServer.AddStreamHandler(
|
||||
new RestDeserialiseSecureHandler<InventoryItemBase, InventoryItemBase>(
|
||||
"POST", "/QueryItem/", m_inventoryService.QueryItem, m_inventoryService.CheckAuthSession));
|
||||
|
||||
// WARNING: Root folders no longer just delivers the root and immediate child folders (e.g
|
||||
// system folders such as Objects, Textures), but it now returns the entire inventory skeleton.
|
||||
// It would have been better to rename this request, but complexities in the BaseHttpServer
|
||||
|
|
|
@ -296,6 +296,22 @@ namespace OpenSim.Region.Communications.OGS1
|
|||
return false;
|
||||
}
|
||||
|
||||
public InventoryItemBase QueryItem(InventoryItemBase item)
|
||||
{
|
||||
try
|
||||
{
|
||||
return SynchronousRestObjectPoster.BeginPostObject<InventoryItemBase, InventoryItemBase>(
|
||||
"POST", _inventoryServerUrl + "/QueryItem/", 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;
|
||||
|
|
|
@ -115,6 +115,11 @@ namespace OpenSim.Tests.Common.Mock
|
|||
public void updateInventoryItem(InventoryItemBase item) {}
|
||||
public void deleteInventoryItem(UUID item) {}
|
||||
|
||||
public InventoryItemBase queryInventoryItem(UUID item)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
public void addInventoryFolder(InventoryFolderBase folder)
|
||||
{
|
||||
m_folders[folder.ID] = folder;
|
||||
|
|
Loading…
Reference in New Issue