From 412112acbafa6e1f111b12007fd3a81728d0b2f5 Mon Sep 17 00:00:00 2001 From: Melanie Thielker Date: Mon, 23 Mar 2009 00:11:34 +0000 Subject: Committing partial work on passing folders across instances. This may crash. --- .../Communications/Cache/CachedUserInfo.cs | 51 ++++++++++++++++++++++ 1 file changed, 51 insertions(+) (limited to 'OpenSim/Framework/Communications/Cache') diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index e590b9d..8d36623 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -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; + } + } /// -- cgit v1.1