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>
|
/// <param name="item"></param>
|
||||||
void deleteInventoryItem(UUID item);
|
void deleteInventoryItem(UUID item);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="item"></param>
|
||||||
|
InventoryItemBase queryInventoryItem(UUID item);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Adds a new folder specified by folder
|
/// Adds a new folder specified by folder
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -530,6 +530,11 @@ namespace OpenSim.Data.MSSQL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns all activated gesture-items in the inventory of the specified avatar.
|
/// Returns all activated gesture-items in the inventory of the specified avatar.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -539,6 +539,11 @@ namespace OpenSim.Data.MySQL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||||
|
{
|
||||||
|
return getInventoryItem(itemID);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new inventory folder
|
/// Creates a new inventory folder
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -177,6 +177,11 @@ namespace OpenSim.Data.NHibernate
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Returns an inventory folder by its UUID
|
/// Returns an inventory folder by its UUID
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -618,6 +618,11 @@ namespace OpenSim.Data.SQLite
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public InventoryItemBase queryInventoryItem(UUID itemID)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Delete all items in the specified folder
|
/// Delete all items in the specified folder
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -36,6 +36,7 @@ namespace OpenSim.Framework.Communications.Cache
|
||||||
internal delegate void AddItemDelegate(InventoryItemBase itemInfo);
|
internal delegate void AddItemDelegate(InventoryItemBase itemInfo);
|
||||||
internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo);
|
internal delegate void UpdateItemDelegate(InventoryItemBase itemInfo);
|
||||||
internal delegate void DeleteItemDelegate(UUID itemID);
|
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 CreateFolderDelegate(string folderName, UUID folderID, ushort folderType, UUID parentID);
|
||||||
internal delegate void MoveFolderDelegate(UUID folderID, UUID parentID);
|
internal delegate void MoveFolderDelegate(UUID folderID, UUID parentID);
|
||||||
|
@ -767,6 +768,47 @@ namespace OpenSim.Framework.Communications.Cache
|
||||||
|
|
||||||
return RootFolder.FindFolderForType(type);
|
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>
|
/// <summary>
|
||||||
|
|
|
@ -104,6 +104,14 @@ namespace OpenSim.Framework.Communications
|
||||||
/// <returns>true if the item was successfully deleted</returns>
|
/// <returns>true if the item was successfully deleted</returns>
|
||||||
bool DeleteItem(InventoryItemBase item);
|
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>
|
/// <summary>
|
||||||
/// Does the given user have an inventory structure?
|
/// Does the given user have an inventory structure?
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -278,6 +278,20 @@ namespace OpenSim.Framework.Communications
|
||||||
return true;
|
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>
|
/// <summary>
|
||||||
/// Purge a folder of all items items and subfolders.
|
/// Purge a folder of all items items and subfolders.
|
||||||
///
|
///
|
||||||
|
|
|
@ -127,6 +127,10 @@ namespace OpenSim.Grid.InventoryServer
|
||||||
new RestDeserialiseSecureHandler<InventoryItemBase, bool>(
|
new RestDeserialiseSecureHandler<InventoryItemBase, bool>(
|
||||||
"POST", "/DeleteItem/", m_inventoryService.DeleteItem, m_inventoryService.CheckAuthSession));
|
"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
|
// 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.
|
// 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
|
// 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;
|
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)
|
public bool HasInventoryForUser(UUID userID)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -115,6 +115,11 @@ namespace OpenSim.Tests.Common.Mock
|
||||||
public void updateInventoryItem(InventoryItemBase item) {}
|
public void updateInventoryItem(InventoryItemBase item) {}
|
||||||
public void deleteInventoryItem(UUID item) {}
|
public void deleteInventoryItem(UUID item) {}
|
||||||
|
|
||||||
|
public InventoryItemBase queryInventoryItem(UUID item)
|
||||||
|
{
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public void addInventoryFolder(InventoryFolderBase folder)
|
public void addInventoryFolder(InventoryFolderBase folder)
|
||||||
{
|
{
|
||||||
m_folders[folder.ID] = folder;
|
m_folders[folder.ID] = folder;
|
||||||
|
|
Loading…
Reference in New Issue