From 1121a214b9258487dae0d84dad1a0b495d2f80bd Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Sat, 21 Mar 2009 17:46:58 +0000 Subject: 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. --- .../Communications/Cache/CachedUserInfo.cs | 42 ++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'OpenSim/Framework/Communications/Cache/CachedUserInfo.cs') diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index c5bbd6a..57c3ece 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -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; + } + } /// -- cgit v1.1