From 7aa54593e0b6672979feec97b8151ed134388723 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Wed, 12 Aug 2009 20:39:48 -0700 Subject: Redirected all calls to CachedUserProfile methods to the inventory service. Redirection of the RootFolder property is still todo. This compiles but probably inventory will be inconsistent. --- OpenSim/Framework/InventoryItemBase.cs | 11 +- .../AssetTransaction/AgentAssetsTransactions.cs | 47 +- .../Agent/AssetTransaction/AssetXferUploader.cs | 51 +- .../CoreModules/Avatar/Friends/FriendsModule.cs | 7 +- .../CoreModules/Avatar/Gestures/GesturesModule.cs | 39 +- .../Inventory/Transfer/InventoryTransferModule.cs | 141 ++- .../Inventory/InventoryCache.cs | 1 + OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 1015 ++++++++------------ .../Framework/Scenes/Scene.PacketHandlers.cs | 27 +- OpenSim/Region/Framework/Scenes/Scene.cs | 96 +- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 4 +- 11 files changed, 580 insertions(+), 859 deletions(-) diff --git a/OpenSim/Framework/InventoryItemBase.cs b/OpenSim/Framework/InventoryItemBase.cs index 4307fe2..b5bf92f 100644 --- a/OpenSim/Framework/InventoryItemBase.cs +++ b/OpenSim/Framework/InventoryItemBase.cs @@ -354,7 +354,16 @@ namespace OpenSim.Framework } } protected int m_creationDate = (int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds; - + + public InventoryItemBase() + { + } + + public InventoryItemBase(UUID id) + { + ID = id; + } + public object Clone() { return MemberwiseClone(); diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs index 8d586c4..c9ee54f 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AgentAssetsTransactions.cs @@ -192,40 +192,29 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction { if (XferUploaders.ContainsKey(transactionID)) { - CachedUserInfo userInfo = Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails( - remoteClient.AgentId); + UUID assetID = UUID.Combine(transactionID, remoteClient.SecureSessionId); - if (userInfo != null) - { - UUID assetID = UUID.Combine(transactionID, remoteClient.SecureSessionId); - - AssetBase asset = Manager.MyScene.AssetService.Get(assetID.ToString()); - - if (asset == null) - { - asset = GetTransactionAsset(transactionID); - } - - if (asset != null && asset.FullID == assetID) - { - // Assets never get updated, new ones get created - asset.FullID = UUID.Random(); - asset.Name = item.Name; - asset.Description = item.Description; - asset.Type = (sbyte)item.AssetType; - item.AssetID = asset.FullID; - - Manager.MyScene.AssetService.Store(asset); - } + AssetBase asset = Manager.MyScene.AssetService.Get(assetID.ToString()); - userInfo.UpdateItem(item); + if (asset == null) + { + asset = GetTransactionAsset(transactionID); } - else + + if (asset != null && asset.FullID == assetID) { - m_log.ErrorFormat( - "[ASSET TRANSACTIONS]: Could not find user {0} for inventory item update", - remoteClient.AgentId); + // Assets never get updated, new ones get created + asset.FullID = UUID.Random(); + asset.Name = item.Name; + asset.Description = item.Description; + asset.Type = (sbyte)item.AssetType; + item.AssetID = asset.FullID; + + Manager.MyScene.AssetService.Store(asset); } + + IInventoryService invService = Manager.MyScene.InventoryService; + invService.UpdateItem(item); } } } diff --git a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs index afd9f5a..e192b81 100644 --- a/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs +++ b/OpenSim/Region/CoreModules/Agent/AssetTransaction/AssetXferUploader.cs @@ -32,6 +32,7 @@ using log4net; using OpenMetaverse; using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Agent.AssetTransaction { @@ -214,39 +215,31 @@ namespace OpenSim.Region.CoreModules.Agent.AssetTransaction private void DoCreateItem(uint callbackID) { m_userTransactions.Manager.MyScene.AssetService.Store(m_asset); - CachedUserInfo userInfo = - m_userTransactions.Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails( - ourClient.AgentId); - if (userInfo != null) - { - InventoryItemBase item = new InventoryItemBase(); - item.Owner = ourClient.AgentId; - item.CreatorId = ourClient.AgentId.ToString(); - item.ID = UUID.Random(); - item.AssetID = m_asset.FullID; - item.Description = m_description; - item.Name = m_name; - item.AssetType = type; - item.InvType = invType; - item.Folder = InventFolder; - item.BasePermissions = 0x7fffffff; - item.CurrentPermissions = 0x7fffffff; - item.GroupPermissions=0; - item.EveryOnePermissions=0; - item.NextPermissions = nextPerm; - item.Flags = (uint) wearableType; - item.CreationDate = Util.UnixTimeSinceEpoch(); + IInventoryService invService = m_userTransactions.Manager.MyScene.InventoryService; + + InventoryItemBase item = new InventoryItemBase(); + item.Owner = ourClient.AgentId; + item.CreatorId = ourClient.AgentId.ToString(); + item.ID = UUID.Random(); + item.AssetID = m_asset.FullID; + item.Description = m_description; + item.Name = m_name; + item.AssetType = type; + item.InvType = invType; + item.Folder = InventFolder; + item.BasePermissions = 0x7fffffff; + item.CurrentPermissions = 0x7fffffff; + item.GroupPermissions=0; + item.EveryOnePermissions=0; + item.NextPermissions = nextPerm; + item.Flags = (uint) wearableType; + item.CreationDate = Util.UnixTimeSinceEpoch(); - userInfo.AddItem(item); + if (invService.AddItem(item)) ourClient.SendInventoryItemCreateUpdate(item, callbackID); - } else - { - m_log.ErrorFormat( - "[ASSET TRANSACTIONS]: Could not find user {0} for inventory item creation", - ourClient.AgentId); - } + ourClient.SendAlertMessage("Unable to create inventory item"); } /// diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index b6250a2..49b2b5c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs @@ -39,6 +39,7 @@ using OpenSim.Framework.Communications; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Avatar.Friends { @@ -654,8 +655,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends initiator.ControllingClient.SendAgentOnline(new UUID[] { fromAgentID }); // find the folder for the friend... - InventoryFolderImpl folder = - initiator.Scene.CommsManager.UserProfileCacheService.GetUserDetails(toAgentID).FindFolderForType((int)InventoryType.CallingCard); + //InventoryFolderImpl folder = + // initiator.Scene.CommsManager.UserProfileCacheService.GetUserDetails(toAgentID).FindFolderForType((int)InventoryType.CallingCard); + IInventoryService invService = initiator.Scene.InventoryService; + InventoryFolderBase folder = invService.GetFolderForType(toAgentID, AssetType.CallingCard); if (folder != null) { // ... and add the calling card diff --git a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs index 102feaf..e61648c 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs @@ -33,6 +33,7 @@ using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Avatar.Gestures { @@ -62,42 +63,32 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures public virtual void ActivateGesture(IClientAPI client, UUID assetId, UUID gestureId) { - CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); + IInventoryService invService = m_scene.InventoryService; - if (userInfo != null) + InventoryItemBase item = invService.QueryItem(new InventoryItemBase(gestureId)); + if (item != null) { - InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId); - if (item != null) - { - item.Flags = 1; - userInfo.UpdateItem(item); - } - else - m_log.ErrorFormat( - "[GESTURES]: Unable to find gesture to activate {0} for {1}", gestureId, client.Name); + item.Flags = 1; + invService.UpdateItem(item); } else - m_log.ErrorFormat("[GESTURES]: Unable to find user {0}", client.Name); + m_log.WarnFormat( + "[GESTURES]: Unable to find gesture {0} to activate for {1}", gestureId, client.Name); } public virtual void DeactivateGesture(IClientAPI client, UUID gestureId) { - CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(client.AgentId); + IInventoryService invService = m_scene.InventoryService; - if (userInfo != null) + InventoryItemBase item = invService.QueryItem(new InventoryItemBase(gestureId)); + if (item != null) { - InventoryItemBase item = userInfo.RootFolder.FindItem(gestureId); - if (item != null) - { - item.Flags = 0; - userInfo.UpdateItem(item); - } - else - m_log.ErrorFormat( - "[GESTURES]: Unable to find gesture to deactivate {0} for {1}", gestureId, client.Name); + item.Flags = 0; + invService.UpdateItem(item); } else - m_log.ErrorFormat("[GESTURES]: Unable to find user {0}", client.Name); + m_log.ErrorFormat( + "[GESTURES]: Unable to find gesture to deactivate {0} for {1}", gestureId, client.Name); } } } \ No newline at end of file diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index 811d4cc..b5650fd 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs @@ -35,6 +35,7 @@ using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer { @@ -154,7 +155,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer "into agent {1}'s inventory", folderID, new UUID(im.toAgentID)); - InventoryFolderImpl folderCopy + InventoryFolderBase folderCopy = scene.GiveInventoryFolder(new UUID(im.toAgentID), client.AgentId, folderID, UUID.Zero); if (folderCopy == null) @@ -247,52 +248,51 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer // It will have been pushed to the client, too // - CachedUserInfo userInfo = - scene.CommsManager.UserProfileCacheService. - GetUserDetails(client.AgentId); + //CachedUserInfo userInfo = + // scene.CommsManager.UserProfileCacheService. + // GetUserDetails(client.AgentId); + IInventoryService invService = scene.InventoryService; - if (userInfo != null) - { - InventoryFolderImpl trashFolder = - userInfo.FindFolderForType((int)AssetType.TrashFolder); - - UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip - - InventoryItemBase item = userInfo.RootFolder.FindItem(inventoryEntityID); - InventoryFolderBase folder = null; + InventoryFolderBase trashFolder = + invService.GetFolderForType(client.AgentId, AssetType.TrashFolder); + + UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip - if (item != null && trashFolder != null) - { - item.Folder = trashFolder.ID; - - userInfo.DeleteItem(inventoryEntityID); + InventoryItemBase item = invService.QueryItem(new InventoryItemBase(inventoryEntityID)); + InventoryFolderBase folder = null; + + if (item != null && trashFolder != null) + { + item.Folder = trashFolder.ID; - scene.AddInventoryItem(client, item); - } - else + // Diva comment: can't we just update this item??? + invService.DeleteItem(item); + scene.AddInventoryItem(client, item); + } + else + { + folder = invService.QueryFolder(new InventoryFolderBase(inventoryEntityID)); + + if (folder != null & trashFolder != null) { - folder = userInfo.RootFolder.FindFolder(inventoryEntityID); - - if (folder != null & trashFolder != null) - { - userInfo.MoveFolder(inventoryEntityID, trashFolder.ID); - } + folder.ParentID = trashFolder.ID; + invService.MoveFolder(folder); } + } + + if ((null == item && null == folder) | null == trashFolder) + { + string reason = String.Empty; - if ((null == item && null == folder) | null == trashFolder) - { - string reason = String.Empty; - - if (trashFolder == null) - reason += " Trash folder not found."; - if (item == null) - reason += " Item not found."; - if (folder == null) - reason += " Folder not found."; - - client.SendAgentAlertMessage("Unable to delete "+ - "received inventory" + reason, false); - } + if (trashFolder == null) + reason += " Trash folder not found."; + if (item == null) + reason += " Item not found."; + if (folder == null) + reason += " Folder not found."; + + client.SendAgentAlertMessage("Unable to delete "+ + "received inventory" + reason, false); } ScenePresence user = scene.GetScenePresence(new UUID(im.toAgentID)); @@ -405,17 +405,18 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer return; } - CachedUserInfo userInfo = - scene.CommsManager.UserProfileCacheService. - GetUserDetails(user.ControllingClient.AgentId); + //CachedUserInfo userInfo = + // scene.CommsManager.UserProfileCacheService. + // GetUserDetails(user.ControllingClient.AgentId); - if (userInfo == null) - { - m_log.Debug("[INVENTORY TRANSFER] Can't find user info of recipient"); - return; - } + //if (userInfo == null) + //{ + // m_log.Debug("[INVENTORY TRANSFER] Can't find user info of recipient"); + // return; + //} AssetType assetType = (AssetType)msg.binaryBucket[0]; + IInventoryService invService = scene.InventoryService; if (AssetType.Folder == assetType) { @@ -425,31 +426,23 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer folder.ID = folderID; folder.Owner = user.ControllingClient.AgentId; - // Fetch from database + // Fetch from service // - if (!userInfo.QueryFolder(folder)) + folder = invService.QueryFolder(folder); + if (folder == null) { m_log.Debug("[INVENTORY TRANSFER] Can't find folder to give"); return; } - // Get folder info - // - InventoryFolderImpl folderInfo = userInfo.RootFolder.FindFolder(folder.ID); - if (folderInfo == null) - { - m_log.Debug("[INVENTORY TRANSFER] Can't retrieve folder to give"); - return; - } - - user.ControllingClient.SendBulkUpdateInventory(folderInfo); + user.ControllingClient.SendBulkUpdateInventory(folder); - // This unelegant, slow kludge is to reload the folders and - // items. Since a folder give can transfer subfolders and - // items, this is the easiest way to pull that stuff in - // - userInfo.DropInventory(); - userInfo.FetchInventory(); + //// This unelegant, slow kludge is to reload the folders and + //// items. Since a folder give can transfer subfolders and + //// items, this is the easiest way to pull that stuff in + //// + //userInfo.DropInventory(); + //userInfo.FetchInventory(); // Deliver message // @@ -463,20 +456,12 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer item.ID = itemID; item.Owner = user.ControllingClient.AgentId; - // Fetch from database - // - if (!userInfo.QueryItem(item)) - { - m_log.Debug("[INVENTORY TRANSFER] Can't find item to give"); - return; - } - - // Get item info + // Fetch from service // - item = userInfo.RootFolder.FindItem(item.ID); + item = invService.QueryItem(item); if (item == null) { - m_log.Debug("[INVENTORY TRANSFER] Can't retrieve item to give"); + m_log.Debug("[INVENTORY TRANSFER] Can't find item to give"); return; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs index 551a7eb..49c0083 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/InventoryCache.cs @@ -64,6 +64,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory Dictionary folders = m_Connector.GetSystemFolders(presence.UUID); m_log.DebugFormat("[INVENTORY CACHE]: OnMakeRootAgent in {0}, fetched system folders for {1} {2}: count {3}", presence.Scene.RegionInfo.RegionName, presence.Firstname, presence.Lastname, folders.Count); + if (folders.Count > 0) lock (m_InventoryCache) m_InventoryCache.Add(presence.UUID, folders); diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index facd301..80f71b3 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -80,17 +80,12 @@ namespace OpenSim.Region.Framework.Scenes public bool AddInventoryItemReturned(UUID AgentId, InventoryItemBase item) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(AgentId); - if (userInfo != null) - { - userInfo.AddItem(item); + if (InventoryService.AddItem(item)) return true; - } else { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Agent was not found for add of item {1} {2}", item.Name, item.ID); + m_log.WarnFormat( + "[AGENT INVENTORY]: Unable to add item {1} to agent {2} inventory", item.Name, AgentId); return false; } @@ -98,13 +93,9 @@ namespace OpenSim.Region.Framework.Scenes public void AddInventoryItem(UUID AgentID, InventoryItemBase item) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(AgentID); - if (userInfo != null) + if (InventoryService.AddItem(item)) { - userInfo.AddItem(item); - int userlevel = 0; if (Permissions.IsGod(AgentID)) { @@ -120,8 +111,8 @@ namespace OpenSim.Region.Framework.Scenes } else { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Agent {1} was not found for add of item {2} {3}", + m_log.WarnFormat( + "[AGENT INVENTORY]: Agent {1} could not add item {2} {3}", AgentID, item.Name, item.ID); return; @@ -136,20 +127,8 @@ namespace OpenSim.Region.Framework.Scenes /// in which the item is to be placed. public void AddInventoryItem(IClientAPI remoteClient, InventoryItemBase item) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (userInfo != null) - { - AddInventoryItem(remoteClient.AgentId, item); - remoteClient.SendInventoryItemCreateUpdate(item, 0); - } - else - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not resolve user {0} for adding an inventory item", - remoteClient.AgentId); - } + AddInventoryItem(remoteClient.AgentId, item); + remoteClient.SendInventoryItemCreateUpdate(item, 0); } /// @@ -161,47 +140,40 @@ namespace OpenSim.Region.Framework.Scenes /// public virtual UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data) { - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + + if (item != null) { - if (userInfo.RootFolder != null) + if ((InventoryType)item.InvType == InventoryType.Notecard) { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); - - if (item != null) + if (!Permissions.CanEditNotecard(itemID, UUID.Zero, remoteClient.AgentId)) { - if ((InventoryType)item.InvType == InventoryType.Notecard) - { - if (!Permissions.CanEditNotecard(itemID, UUID.Zero, remoteClient.AgentId)) - { - remoteClient.SendAgentAlertMessage("Insufficient permissions to edit notecard", false); - return UUID.Zero; - } + remoteClient.SendAgentAlertMessage("Insufficient permissions to edit notecard", false); + return UUID.Zero; + } - remoteClient.SendAgentAlertMessage("Notecard saved", false); - } - else if ((InventoryType)item.InvType == InventoryType.LSL) - { - if (!Permissions.CanEditScript(itemID, UUID.Zero, remoteClient.AgentId)) - { - remoteClient.SendAgentAlertMessage("Insufficient permissions to edit script", false); - return UUID.Zero; - } + remoteClient.SendAgentAlertMessage("Notecard saved", false); + } + else if ((InventoryType)item.InvType == InventoryType.LSL) + { + if (!Permissions.CanEditScript(itemID, UUID.Zero, remoteClient.AgentId)) + { + remoteClient.SendAgentAlertMessage("Insufficient permissions to edit script", false); + return UUID.Zero; + } - remoteClient.SendAgentAlertMessage("Script saved", false); - } + remoteClient.SendAgentAlertMessage("Script saved", false); + } - AssetBase asset = - CreateAsset(item.Name, item.Description, (sbyte)item.AssetType, data); - item.AssetID = asset.FullID; - AssetService.Store(asset); + AssetBase asset = + CreateAsset(item.Name, item.Description, (sbyte)item.AssetType, data); + item.AssetID = asset.FullID; + AssetService.Store(asset); - userInfo.UpdateItem(item); + InventoryService.UpdateItem(item); - // remoteClient.SendInventoryItemCreateUpdate(item); - return (asset.FullID); - } - } + // remoteClient.SendInventoryItemCreateUpdate(item); + return (asset.FullID); } else { @@ -343,63 +315,52 @@ namespace OpenSim.Region.Framework.Scenes public void UpdateInventoryItemAsset(IClientAPI remoteClient, UUID transactionID, UUID itemID, InventoryItemBase itemUpd) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); - if (userInfo != null && userInfo.RootFolder != null) + if (item != null) { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); - - if (item != null) + if (UUID.Zero == transactionID) { - if (UUID.Zero == transactionID) - { - item.Name = itemUpd.Name; - item.Description = itemUpd.Description; - item.NextPermissions = itemUpd.NextPermissions; - item.CurrentPermissions |= 8; // Slam! - item.EveryOnePermissions = itemUpd.EveryOnePermissions; - item.GroupPermissions = itemUpd.GroupPermissions; - - item.GroupID = itemUpd.GroupID; - item.GroupOwned = itemUpd.GroupOwned; - item.CreationDate = itemUpd.CreationDate; - // The client sends zero if its newly created? - - if (itemUpd.CreationDate == 0) - item.CreationDate = Util.UnixTimeSinceEpoch(); - else - item.CreationDate = itemUpd.CreationDate; + item.Name = itemUpd.Name; + item.Description = itemUpd.Description; + item.NextPermissions = itemUpd.NextPermissions; + item.CurrentPermissions |= 8; // Slam! + item.EveryOnePermissions = itemUpd.EveryOnePermissions; + item.GroupPermissions = itemUpd.GroupPermissions; - // TODO: Check if folder changed and move item - //item.NextPermissions = itemUpd.Folder; - item.InvType = itemUpd.InvType; - item.SalePrice = itemUpd.SalePrice; - item.SaleType = itemUpd.SaleType; - item.Flags = itemUpd.Flags; + item.GroupID = itemUpd.GroupID; + item.GroupOwned = itemUpd.GroupOwned; + item.CreationDate = itemUpd.CreationDate; + // The client sends zero if its newly created? - userInfo.UpdateItem(item); - } + if (itemUpd.CreationDate == 0) + item.CreationDate = Util.UnixTimeSinceEpoch(); else - { - IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); - if (agentTransactions != null) - { - agentTransactions.HandleItemUpdateFromTransaction( - remoteClient, transactionID, item); - } - } + item.CreationDate = itemUpd.CreationDate; + + // TODO: Check if folder changed and move item + //item.NextPermissions = itemUpd.Folder; + item.InvType = itemUpd.InvType; + item.SalePrice = itemUpd.SalePrice; + item.SaleType = itemUpd.SaleType; + item.Flags = itemUpd.Flags; + + InventoryService.UpdateItem(item); } else { - m_log.Error( - "[AGENTINVENTORY]: Item ID " + itemID + " not found for an inventory item update."); + IAgentAssetTransactions agentTransactions = this.RequestModuleInterface(); + if (agentTransactions != null) + { + agentTransactions.HandleItemUpdateFromTransaction( + remoteClient, transactionID, item); + } } } else { m_log.Error( - "[AGENT INVENTORY]: Agent ID " + remoteClient.AgentId + " not found for an inventory item update."); + "[AGENTINVENTORY]: Item ID " + itemID + " not found for an inventory item update."); } } @@ -445,123 +406,85 @@ namespace OpenSim.Region.Framework.Scenes public virtual InventoryItemBase GiveInventoryItem( UUID recipient, UUID senderId, UUID itemId, UUID recipientFolderId) { - // Retrieve the item from the sender - CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); - Console.WriteLine("Scene.Inventory.cs: GiveInventoryItem"); - if (senderUserInfo == null) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to find sending user {0} for item {1}", senderId, itemId); - - return null; - } + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemId)); - if (senderUserInfo.RootFolder != null) + if ((item != null) && (item.Owner == senderId)) { - InventoryItemBase item = senderUserInfo.RootFolder.FindItem(itemId); - - if (item != null) + if (!Permissions.BypassPermissions()) { - if (!Permissions.BypassPermissions()) - { - if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0) - return null; - } + if ((item.CurrentPermissions & (uint)PermissionMask.Transfer) == 0) + return null; + } - CachedUserInfo recipientUserInfo - = CommsManager.UserProfileCacheService.GetUserDetails(recipient); + // Insert a copy of the item into the recipient + InventoryItemBase itemCopy = new InventoryItemBase(); + itemCopy.Owner = recipient; + itemCopy.CreatorId = item.CreatorId; + itemCopy.ID = UUID.Random(); + itemCopy.AssetID = item.AssetID; + itemCopy.Description = item.Description; + itemCopy.Name = item.Name; + itemCopy.AssetType = item.AssetType; + itemCopy.InvType = item.InvType; + itemCopy.Folder = recipientFolderId; - if (recipientUserInfo != null) + if (Permissions.PropagatePermissions()) + { + if (item.InvType == (int)InventoryType.Object) { - if (!recipientUserInfo.HasReceivedInventory) - recipientUserInfo.FetchInventory(); - - // Insert a copy of the item into the recipient - InventoryItemBase itemCopy = new InventoryItemBase(); - itemCopy.Owner = recipient; - itemCopy.CreatorId = item.CreatorId; - itemCopy.ID = UUID.Random(); - itemCopy.AssetID = item.AssetID; - itemCopy.Description = item.Description; - itemCopy.Name = item.Name; - itemCopy.AssetType = item.AssetType; - itemCopy.InvType = item.InvType; - itemCopy.Folder = recipientFolderId; - - if (Permissions.PropagatePermissions()) - { - if (item.InvType == (int)InventoryType.Object) - { - itemCopy.BasePermissions &= ~(uint)(PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer); - itemCopy.BasePermissions |= (item.CurrentPermissions & 7) << 13; - } - else - { - itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions; - } - - itemCopy.CurrentPermissions = itemCopy.BasePermissions; - if ((item.CurrentPermissions & 8) != 0) // Propagate slam bit - { - itemCopy.BasePermissions &= item.NextPermissions; - itemCopy.CurrentPermissions = itemCopy.BasePermissions; - itemCopy.CurrentPermissions |= 8; - } - - itemCopy.NextPermissions = item.NextPermissions; - itemCopy.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions; - itemCopy.GroupPermissions = item.GroupPermissions & item.NextPermissions; - } - else - { - itemCopy.CurrentPermissions = item.CurrentPermissions; - itemCopy.NextPermissions = item.NextPermissions; - itemCopy.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions; - itemCopy.GroupPermissions = item.GroupPermissions & item.NextPermissions; - itemCopy.BasePermissions = item.BasePermissions; - } - - itemCopy.GroupID = UUID.Zero; - itemCopy.GroupOwned = false; - itemCopy.Flags = item.Flags; - itemCopy.SalePrice = item.SalePrice; - itemCopy.SaleType = item.SaleType; - - recipientUserInfo.AddItem(itemCopy); - - if (!Permissions.BypassPermissions()) - { - if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) - senderUserInfo.DeleteItem(itemId); - } - - return itemCopy; + itemCopy.BasePermissions &= ~(uint)(PermissionMask.Copy | PermissionMask.Modify | PermissionMask.Transfer); + itemCopy.BasePermissions |= (item.CurrentPermissions & 7) << 13; } else { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find userinfo for recipient user {0} of item {1}, {2} from {3}", - recipient, item.Name, - item.ID, senderId); + itemCopy.BasePermissions = item.BasePermissions & item.NextPermissions; } + + itemCopy.CurrentPermissions = itemCopy.BasePermissions; + if ((item.CurrentPermissions & 8) != 0) // Propagate slam bit + { + itemCopy.BasePermissions &= item.NextPermissions; + itemCopy.CurrentPermissions = itemCopy.BasePermissions; + itemCopy.CurrentPermissions |= 8; + } + + itemCopy.NextPermissions = item.NextPermissions; + itemCopy.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions; + itemCopy.GroupPermissions = item.GroupPermissions & item.NextPermissions; } else { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to find item {0} to give to {1}", itemId, senderId); + itemCopy.CurrentPermissions = item.CurrentPermissions; + itemCopy.NextPermissions = item.NextPermissions; + itemCopy.EveryOnePermissions = item.EveryOnePermissions & item.NextPermissions; + itemCopy.GroupPermissions = item.GroupPermissions & item.NextPermissions; + itemCopy.BasePermissions = item.BasePermissions; + } + + itemCopy.GroupID = UUID.Zero; + itemCopy.GroupOwned = false; + itemCopy.Flags = item.Flags; + itemCopy.SalePrice = item.SalePrice; + itemCopy.SaleType = item.SaleType; - return null; + InventoryService.AddItem(itemCopy); + + if (!Permissions.BypassPermissions()) + { + if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) + InventoryService.DeleteItem(new InventoryItemBase(itemId)); } + + return itemCopy; } else { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemId.ToString() + ", no root folder"); + m_log.WarnFormat("[AGENT INVENTORY]: Failed to find item {0} or item does not belong to giver ", itemId); return null; } - return null; } /// @@ -578,31 +501,11 @@ namespace OpenSim.Region.Framework.Scenes /// /// The inventory folder copy given, null if the copy was unsuccessful /// - public virtual InventoryFolderImpl GiveInventoryFolder( + public virtual InventoryFolderBase GiveInventoryFolder( UUID recipientId, UUID senderId, UUID folderId, UUID recipientParentFolderId) { - // Retrieve the folder from the sender - CachedUserInfo senderUserInfo = CommsManager.UserProfileCacheService.GetUserDetails(senderId); - - if (null == senderUserInfo) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to find sending user {0} for folder {1}", senderId, folderId); - - return null; - } - - if (!senderUserInfo.HasReceivedInventory) - { - m_log.DebugFormat( - "[AGENT INVENTORY]: Could not give inventory folder - have not yet received inventory for {0}", - senderId); - - return null; - } - - InventoryFolderImpl folder = senderUserInfo.RootFolder.FindFolder(folderId); - + //// Retrieve the folder from the sender + InventoryFolderBase folder = InventoryService.QueryFolder(new InventoryFolderBase(folderId)); if (null == folder) { m_log.ErrorFormat( @@ -611,48 +514,37 @@ namespace OpenSim.Region.Framework.Scenes return null; } - CachedUserInfo recipientUserInfo - = CommsManager.UserProfileCacheService.GetUserDetails(recipientId); - - if (null == recipientUserInfo) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to find receiving user {0} for folder {1}", recipientId, folderId); - - return null; - } - if (!recipientUserInfo.HasReceivedInventory) + if (recipientParentFolderId == UUID.Zero) { - recipientUserInfo.FetchInventory(); - if (!WaitForInventory(recipientUserInfo)) + InventoryFolderBase recipientRootFolder = InventoryService.GetRootFolder(recipientId); + if (recipientRootFolder != null) + recipientParentFolderId = recipientRootFolder.ID; + else + { + m_log.WarnFormat("[AGENT INVENTORY]: Unable to find root folder for receiving agent"); return null; + } } - if (recipientParentFolderId == UUID.Zero) - recipientParentFolderId = recipientUserInfo.RootFolder.ID; - UUID newFolderId = UUID.Random(); - recipientUserInfo.CreateFolder(folder.Name, newFolderId, (ushort)folder.Type, recipientParentFolderId); - - // XXX: Messy - we should really get this back in the CreateFolder call - InventoryFolderImpl copiedFolder = recipientUserInfo.RootFolder.FindFolder(newFolderId); + InventoryFolderBase newFolder = new InventoryFolderBase(newFolderId, folder.Name, recipientId, folder.Type, recipientParentFolderId, folder.Version); + InventoryService.AddFolder(newFolder); // Give all the subfolders - List subFolders = folder.RequestListOfFolderImpls(); - foreach (InventoryFolderImpl childFolder in subFolders) + InventoryCollection contents = InventoryService.GetFolderContent(senderId, folderId); + foreach (InventoryFolderBase childFolder in contents.Folders) { - GiveInventoryFolder(recipientId, senderId, childFolder.ID, copiedFolder.ID); + GiveInventoryFolder(recipientId, senderId, childFolder.ID, newFolder.ID); } // Give all the items - List items = folder.RequestListOfItems(); - foreach (InventoryItemBase item in items) + foreach (InventoryItemBase item in contents.Items) { - GiveInventoryItem(recipientId, senderId, item.ID, copiedFolder.ID); + GiveInventoryItem(recipientId, senderId, item.ID, newFolder.ID); } - return copiedFolder; + return newFolder; } public void CopyInventoryItem(IClientAPI remoteClient, uint callbackID, UUID oldAgentID, UUID oldItemID, @@ -759,41 +651,24 @@ namespace OpenSim.Region.Framework.Scenes m_log.DebugFormat( "[AGENT INVENTORY]: Moving item {0} to {1} for {2}", itemID, folderID, remoteClient.AgentId); - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (userInfo == null) - { - m_log.Error("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString()); + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); - return; - } - - if (userInfo.RootFolder != null) + if (item != null) { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); - - if (item != null) + if (newName != String.Empty) { - if (newName != String.Empty) - { - item.Name = newName; - } - item.Folder = folderID; - - userInfo.DeleteItem(item.ID); - - AddInventoryItem(remoteClient, item); + item.Name = newName; } - else - { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString()); + item.Folder = folderID; - return; - } + // Diva comment: can't we just update? + InventoryService.DeleteItem(item); + + AddInventoryItem(remoteClient, item); } else { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + itemID.ToString() + ", no root folder"); + m_log.Warn("[AGENT INVENTORY]: Failed to find item " + itemID.ToString()); return; } @@ -830,37 +705,32 @@ namespace OpenSim.Region.Framework.Scenes IClientAPI remoteClient, string creatorID, UUID folderID, string name, uint flags, uint callbackID, AssetBase asset, sbyte invType, uint baseMask, uint currentMask, uint everyoneMask, uint nextOwnerMask, uint groupMask, int creationDate) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (userInfo != null) - { - InventoryItemBase item = new InventoryItemBase(); - item.Owner = remoteClient.AgentId; - item.CreatorId = creatorID; - item.ID = UUID.Random(); - item.AssetID = asset.FullID; - item.Description = asset.Description; - item.Name = name; - item.Flags = flags; - item.AssetType = asset.Type; - item.InvType = invType; - item.Folder = folderID; - item.CurrentPermissions = currentMask; - item.NextPermissions = nextOwnerMask; - item.EveryOnePermissions = everyoneMask; - item.GroupPermissions = groupMask; - item.BasePermissions = baseMask; - item.CreationDate = creationDate; - - userInfo.AddItem(item); + InventoryItemBase item = new InventoryItemBase(); + item.Owner = remoteClient.AgentId; + item.CreatorId = creatorID; + item.ID = UUID.Random(); + item.AssetID = asset.FullID; + item.Description = asset.Description; + item.Name = name; + item.Flags = flags; + item.AssetType = asset.Type; + item.InvType = invType; + item.Folder = folderID; + item.CurrentPermissions = currentMask; + item.NextPermissions = nextOwnerMask; + item.EveryOnePermissions = everyoneMask; + item.GroupPermissions = groupMask; + item.BasePermissions = baseMask; + item.CreationDate = creationDate; + + if (InventoryService.AddItem(item)) remoteClient.SendInventoryItemCreateUpdate(item, callbackID); - } else { + m_dialogModule.SendAlertToUser(remoteClient, "Failed to create item"); m_log.WarnFormat( - "No user details associated with client {0} uuid {1} in CreateNewInventoryItem!", - remoteClient.Name, remoteClient.AgentId); + "Failed to add item for {0} in CreateNewInventoryItem!", + remoteClient.Name); } } @@ -941,19 +811,7 @@ namespace OpenSim.Region.Framework.Scenes /// private void RemoveInventoryItem(IClientAPI remoteClient, UUID itemID) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (userInfo == null) - { - m_log.WarnFormat( - "[AGENT INVENTORY]: Failed to find user {0} {1} to delete inventory item {2}", - remoteClient.Name, remoteClient.AgentId, itemID); - - return; - } - - userInfo.DeleteItem(itemID); + InventoryService.DeleteItem(new InventoryItemBase(itemID)); } /// @@ -1332,19 +1190,12 @@ namespace OpenSim.Region.Framework.Scenes public UUID MoveTaskInventoryItems(UUID destID, string category, SceneObjectPart host, List items) { - CachedUserInfo profile = CommsManager.UserProfileCacheService.GetUserDetails(destID); - if (profile == null || profile.RootFolder == null) - { - m_log.ErrorFormat( - "[PRIM INVENTORY]: " + - "Avatar {0} cannot be found to add items", - destID); - return UUID.Zero; - } + InventoryFolderBase rootFolder = InventoryService.GetRootFolder(destID); UUID newFolderID = UUID.Random(); - profile.CreateFolder(category, newFolderID, 0xffff, profile.RootFolder.ID); + InventoryFolderBase newFolder = new InventoryFolderBase(newFolderID, category, destID, 0xff, rootFolder.ID, rootFolder.Version); + InventoryService.AddFolder(newFolder); foreach (UUID itemID in items) { @@ -1358,19 +1209,27 @@ namespace OpenSim.Region.Framework.Scenes } } - ScenePresence avatar; - + ScenePresence avatar = null; if (TryGetAvatar(destID, out avatar)) { - profile.SendInventoryDecendents(avatar.ControllingClient, - profile.RootFolder.ID, true, false); - profile.SendInventoryDecendents(avatar.ControllingClient, - newFolderID, false, true); + //profile.SendInventoryDecendents(avatar.ControllingClient, + // profile.RootFolder.ID, true, false); + //profile.SendInventoryDecendents(avatar.ControllingClient, + // newFolderID, false, true); + + SendInventoryUpdate(avatar.ControllingClient, rootFolder, true, false); + SendInventoryUpdate(avatar.ControllingClient, newFolder, false, true); } return newFolderID; } + private void SendInventoryUpdate(IClientAPI client, InventoryFolderBase folder, bool fetchFolders, bool fetchItems) + { + InventoryCollection contents = InventoryService.GetFolderContent(client.AgentId, folder.ID); + client.SendInventoryFolderDetails(client.AgentId, folder.ID, contents.Items, contents.Folders, fetchFolders, fetchItems); + } + /// /// Update an item in a prim (task) inventory. /// This method does not handle scripts, RezScript(IClientAPI, UUID, unit) @@ -1848,7 +1707,7 @@ namespace OpenSim.Region.Framework.Scenes // Get the user info of the item destination // - CachedUserInfo userInfo; + UUID userID = UUID.Zero; if (action == DeRezAction.Take || action == DeRezAction.TakeCopy || action == DeRezAction.SaveToExistingUserInventoryItem) @@ -1859,28 +1718,19 @@ namespace OpenSim.Region.Framework.Scenes if (remoteClient == null) return UUID.Zero; - userInfo = CommsManager.UserProfileCacheService.GetUserDetails( - remoteClient.AgentId); + userID = remoteClient.AgentId; } else { // All returns / deletes go to the object owner // - userInfo = CommsManager.UserProfileCacheService.GetUserDetails( - objectGroup.RootPart.OwnerID); - } - if (userInfo == null) // Can't proceed - { - return UUID.Zero; + userID = objectGroup.RootPart.OwnerID; } - if (!userInfo.HasReceivedInventory) + if (userID == UUID.Zero) // Can't proceed { - // Async inventory requests will queue, but they will never - // execute unless inventory is actually fetched - // - userInfo.FetchInventory(); + return UUID.Zero; } // If we're returning someone's item, it goes back to the @@ -1894,8 +1744,11 @@ namespace OpenSim.Region.Framework.Scenes if (DeRezAction.SaveToExistingUserInventoryItem == action) { - item = userInfo.RootFolder.FindItem( - objectGroup.RootPart.FromUserInventoryItemID); + item = new InventoryItemBase(objectGroup.RootPart.FromUserInventoryItemID); + item = InventoryService.QueryItem(item); + + //item = userInfo.RootFolder.FindItem( + // objectGroup.RootPart.FromUserInventoryItemID); if (null == item) { @@ -1920,53 +1773,36 @@ namespace OpenSim.Region.Framework.Scenes // have to wait for the inventory to find // the destination folder // - if (!WaitForInventory(userInfo)) - return UUID.Zero; - folder = userInfo.FindFolderForType( - (int)AssetType.LostAndFoundFolder); + folder = InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder); } else { // Assume inventory skeleton was loaded during login // and all folders can be found // - folder = userInfo.FindFolderForType( - (int)AssetType.TrashFolder); + folder = InventoryService.GetFolderForType(userID, AssetType.TrashFolder); } } else if (action == DeRezAction.Return) { - // Wait if needed - // - if (!userInfo.HasReceivedInventory) - { - if (!WaitForInventory(userInfo)) - return UUID.Zero; - } // Dump to lost + found unconditionally // - folder = userInfo.FindFolderForType( - (int)AssetType.LostAndFoundFolder); + folder = InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder); } if (folderID == UUID.Zero && folder == null) { // Catch all. Use lost & found // - if (!userInfo.HasReceivedInventory) - { - if (!WaitForInventory(userInfo)) - return UUID.Zero; - } - folder = userInfo.FindFolderForType( - (int)AssetType.LostAndFoundFolder); + folder = InventoryService.GetFolderForType(userID, AssetType.LostAndFoundFolder); } if (folder == null) // None of the above { - folder = userInfo.RootFolder.FindFolder(folderID); + //folder = userInfo.RootFolder.FindFolder(folderID); + folder = new InventoryFolderBase(folderID); if (folder == null) // Nowhere to put it { @@ -1979,7 +1815,7 @@ namespace OpenSim.Region.Framework.Scenes item.ID = UUID.Random(); item.InvType = (int)InventoryType.Object; item.Folder = folder.ID; - item.Owner = userInfo.UserProfile.ID; + item.Owner = userID; } AssetBase asset = CreateAsset( @@ -1993,7 +1829,7 @@ namespace OpenSim.Region.Framework.Scenes if (DeRezAction.SaveToExistingUserInventoryItem == action) { item.AssetID = asset.FullID; - userInfo.UpdateItem(item); + InventoryService.UpdateItem(item); } else { @@ -2034,7 +1870,7 @@ namespace OpenSim.Region.Framework.Scenes item.Name = asset.Name; item.AssetType = asset.Type; - userInfo.AddItem(item); + InventoryService.AddItem(item); if (remoteClient != null && item.Owner == remoteClient.AgentId) { @@ -2053,7 +1889,7 @@ namespace OpenSim.Region.Framework.Scenes return assetID; } - public void updateKnownAsset(IClientAPI remoteClient, SceneObjectGroup grp, UUID assetID, UUID agentID) + public void UpdateKnownItem(IClientAPI remoteClient, SceneObjectGroup grp, UUID itemID, UUID agentID) { SceneObjectGroup objectGroup = grp; if (objectGroup != null) @@ -2070,65 +1906,29 @@ namespace OpenSim.Region.Framework.Scenes string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(objectGroup); - CachedUserInfo userInfo = - CommsManager.UserProfileCacheService.GetUserDetails(agentID); - if (userInfo != null && userInfo.RootFolder != null) + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + + if (item != null) { - Queue searchfolders = new Queue(); - searchfolders.Enqueue(userInfo.RootFolder); + AssetBase asset = CreateAsset( + objectGroup.GetPartName(objectGroup.LocalId), + objectGroup.GetPartDescription(objectGroup.LocalId), + (sbyte)AssetType.Object, + Utils.StringToBytes(sceneObjectXml)); + AssetService.Store(asset); - UUID foundFolder = UUID.Zero; - InventoryItemBase item = null; + item.AssetID = asset.FullID; + item.Description = asset.Description; + item.Name = asset.Name; + item.AssetType = asset.Type; + item.InvType = (int)InventoryType.Object; - // search through folders to find the asset. - while (searchfolders.Count > 0) - { - InventoryFolderImpl fld = searchfolders.Dequeue(); - lock (fld) - { - if (fld != null) - { - if (fld.Items.ContainsKey(assetID)) - { - item = fld.Items[assetID]; - foundFolder = fld.ID; - searchfolders.Clear(); - break; - } - else - { - foreach (InventoryFolderImpl subfld in fld.RequestListOfFolderImpls()) - { - searchfolders.Enqueue(subfld); - } - } - } - } - } + InventoryService.UpdateItem(item); - if (foundFolder != UUID.Zero && item != null) + // this gets called when the agent loggs off! + if (remoteClient != null) { - AssetBase asset = CreateAsset( - objectGroup.GetPartName(objectGroup.LocalId), - objectGroup.GetPartDescription(objectGroup.LocalId), - (sbyte)AssetType.Object, - Utils.StringToBytes(sceneObjectXml)); - AssetService.Store(asset); - - item.AssetID = asset.FullID; - item.Description = asset.Description; - item.Name = asset.Name; - item.AssetType = asset.Type; - item.InvType = (int)InventoryType.Object; - item.Folder = foundFolder; - - userInfo.UpdateItem(item); - - // this gets called when the agent loggs off! - if (remoteClient != null) - { - remoteClient.SendInventoryItemCreateUpdate(item, 0); - } + remoteClient.SendInventoryItemCreateUpdate(item, 0); } } } @@ -2140,59 +1940,54 @@ namespace OpenSim.Region.Framework.Scenes if (grp != null) { string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(grp); + + AssetBase asset = CreateAsset( + grp.GetPartName(grp.LocalId), + grp.GetPartDescription(grp.LocalId), + (sbyte)AssetType.Object, + Utils.StringToBytes(sceneObjectXml)); + AssetService.Store(asset); - CachedUserInfo userInfo = - CommsManager.UserProfileCacheService.GetUserDetails(AgentId); - - if (userInfo != null) - { - AssetBase asset = CreateAsset( - grp.GetPartName(grp.LocalId), - grp.GetPartDescription(grp.LocalId), - (sbyte)AssetType.Object, - Utils.StringToBytes(sceneObjectXml)); - AssetService.Store(asset); - - InventoryItemBase item = new InventoryItemBase(); - item.CreatorId = grp.RootPart.CreatorID.ToString(); - item.Owner = remoteClient.AgentId; - item.ID = UUID.Random(); - item.AssetID = asset.FullID; - item.Description = asset.Description; - item.Name = asset.Name; - item.AssetType = asset.Type; - item.InvType = (int)InventoryType.Object; + InventoryItemBase item = new InventoryItemBase(); + item.CreatorId = grp.RootPart.CreatorID.ToString(); + item.Owner = remoteClient.AgentId; + item.ID = UUID.Random(); + item.AssetID = asset.FullID; + item.Description = asset.Description; + item.Name = asset.Name; + item.AssetType = asset.Type; + item.InvType = (int)InventoryType.Object; - item.Folder = UUID.Zero; // Objects folder! + item.Folder = UUID.Zero; // Objects folder! - if ((remoteClient.AgentId != grp.RootPart.OwnerID) && Permissions.PropagatePermissions()) - { - item.BasePermissions = grp.RootPart.NextOwnerMask; - item.CurrentPermissions = grp.RootPart.NextOwnerMask; - item.NextPermissions = grp.RootPart.NextOwnerMask; - item.EveryOnePermissions = grp.RootPart.EveryoneMask & grp.RootPart.NextOwnerMask; - item.GroupPermissions = grp.RootPart.GroupMask & grp.RootPart.NextOwnerMask; - } - else - { - item.BasePermissions = grp.RootPart.BaseMask; - item.CurrentPermissions = grp.RootPart.OwnerMask; - item.NextPermissions = grp.RootPart.NextOwnerMask; - item.EveryOnePermissions = grp.RootPart.EveryoneMask; - item.GroupPermissions = grp.RootPart.GroupMask; - } - item.CreationDate = Util.UnixTimeSinceEpoch(); + if ((remoteClient.AgentId != grp.RootPart.OwnerID) && Permissions.PropagatePermissions()) + { + item.BasePermissions = grp.RootPart.NextOwnerMask; + item.CurrentPermissions = grp.RootPart.NextOwnerMask; + item.NextPermissions = grp.RootPart.NextOwnerMask; + item.EveryOnePermissions = grp.RootPart.EveryoneMask & grp.RootPart.NextOwnerMask; + item.GroupPermissions = grp.RootPart.GroupMask & grp.RootPart.NextOwnerMask; + } + else + { + item.BasePermissions = grp.RootPart.BaseMask; + item.CurrentPermissions = grp.RootPart.OwnerMask; + item.NextPermissions = grp.RootPart.NextOwnerMask; + item.EveryOnePermissions = grp.RootPart.EveryoneMask; + item.GroupPermissions = grp.RootPart.GroupMask; + } + item.CreationDate = Util.UnixTimeSinceEpoch(); - // sets assetID so client can show asset as 'attached' in inventory - grp.SetFromAssetID(item.ID); + // sets assetID so client can show asset as 'attached' in inventory + grp.SetFromAssetID(item.ID); - userInfo.AddItem(item); + if (InventoryService.AddItem(item)) remoteClient.SendInventoryItemCreateUpdate(item, 0); + else + m_dialogModule.SendAlertToUser(remoteClient, "Operation failed"); - itemID = item.ID; - return item.AssetID; - } - return UUID.Zero; + itemID = item.ID; + return item.AssetID; } return UUID.Zero; } @@ -2261,180 +2056,164 @@ namespace OpenSim.Region.Framework.Scenes BypassRayCast, bRayEndIsIntersection,true,scale, false); // Rez object - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + + if (item != null) { - // Do NOT use HasReceivedInventory here, this is called - // from within ItemReceive during login for attachments. - // Using HasReceivedInventory here will break attachment - // persistence! - // - if (userInfo.RootFolder != null) + AssetBase rezAsset = AssetService.Get(item.AssetID.ToString()); + + if (rezAsset != null) { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); + UUID itemId = UUID.Zero; - if (item != null) + // If we have permission to copy then link the rezzed object back to the user inventory + // item that it came from. This allows us to enable 'save object to inventory' + if (!Permissions.BypassPermissions()) { - AssetBase rezAsset = AssetService.Get(item.AssetID.ToString()); - - if (rezAsset != null) + if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == (uint)PermissionMask.Copy) { - UUID itemId = UUID.Zero; - - // If we have permission to copy then link the rezzed object back to the user inventory - // item that it came from. This allows us to enable 'save object to inventory' - if (!Permissions.BypassPermissions()) - { - if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == (uint)PermissionMask.Copy) - { - itemId = item.ID; - } - } - else - { - // Brave new fullperm world - // - itemId = item.ID; - } - - string xmlData = Utils.BytesToString(rezAsset.Data); - SceneObjectGroup group - = SceneObjectSerializer.FromOriginalXmlFormat(itemId, xmlData); + itemId = item.ID; + } + } + else + { + // Brave new fullperm world + // + itemId = item.ID; + } - if (!Permissions.CanRezObject( - group.Children.Count, remoteClient.AgentId, pos) - && !attachment) - { - return null; - } + string xmlData = Utils.BytesToString(rezAsset.Data); + SceneObjectGroup group + = SceneObjectSerializer.FromOriginalXmlFormat(itemId, xmlData); - group.ResetIDs(); + if (!Permissions.CanRezObject( + group.Children.Count, remoteClient.AgentId, pos) + && !attachment) + { + return null; + } - if (attachment) - group.RootPart.ObjectFlags |= (uint)PrimFlags.Phantom; + group.ResetIDs(); - AddNewSceneObject(group, true); + if (attachment) + group.RootPart.ObjectFlags |= (uint)PrimFlags.Phantom; - // m_log.InfoFormat("ray end point for inventory rezz is {0} {1} {2} ", RayEnd.X, RayEnd.Y, RayEnd.Z); - // if attachment we set it's asset id so object updates can reflect that - // if not, we set it's position in world. - if (!attachment) - { - float offsetHeight = 0; - pos = GetNewRezLocation( - RayStart, RayEnd, RayTargetID, Quaternion.Identity, - BypassRayCast, bRayEndIsIntersection, true, group.GetAxisAlignedBoundingBox(out offsetHeight), false); - pos.Z += offsetHeight; - group.AbsolutePosition = pos; - // m_log.InfoFormat("rezx point for inventory rezz is {0} {1} {2} and offsetheight was {3}", pos.X, pos.Y, pos.Z, offsetHeight); + AddNewSceneObject(group, true); - } - else - { - group.SetFromAssetID(itemID); - } + // m_log.InfoFormat("ray end point for inventory rezz is {0} {1} {2} ", RayEnd.X, RayEnd.Y, RayEnd.Z); + // if attachment we set it's asset id so object updates can reflect that + // if not, we set it's position in world. + if (!attachment) + { + float offsetHeight = 0; + pos = GetNewRezLocation( + RayStart, RayEnd, RayTargetID, Quaternion.Identity, + BypassRayCast, bRayEndIsIntersection, true, group.GetAxisAlignedBoundingBox(out offsetHeight), false); + pos.Z += offsetHeight; + group.AbsolutePosition = pos; + // m_log.InfoFormat("rezx point for inventory rezz is {0} {1} {2} and offsetheight was {3}", pos.X, pos.Y, pos.Z, offsetHeight); - SceneObjectPart rootPart = null; - try - { - rootPart = group.GetChildPart(group.UUID); - } - catch (NullReferenceException) - { - string isAttachment = ""; + } + else + { + group.SetFromAssetID(itemID); + } - if (attachment) - isAttachment = " Object was an attachment"; + SceneObjectPart rootPart = null; + try + { + rootPart = group.GetChildPart(group.UUID); + } + catch (NullReferenceException) + { + string isAttachment = ""; - m_log.Error("[AGENT INVENTORY]: Error rezzing ItemID: " + itemID + " object has no rootpart." + isAttachment); - } + if (attachment) + isAttachment = " Object was an attachment"; - // Since renaming the item in the inventory does not affect the name stored - // in the serialization, transfer the correct name from the inventory to the - // object itself before we rez. - rootPart.Name = item.Name; - rootPart.Description = item.Description; + m_log.Error("[AGENT INVENTORY]: Error rezzing ItemID: " + itemID + " object has no rootpart." + isAttachment); + } - List partList = new List(group.Children.Values); + // Since renaming the item in the inventory does not affect the name stored + // in the serialization, transfer the correct name from the inventory to the + // object itself before we rez. + rootPart.Name = item.Name; + rootPart.Description = item.Description; - group.SetGroup(remoteClient.ActiveGroupId, remoteClient); - if (rootPart.OwnerID != item.Owner) - { - //Need to kill the for sale here - rootPart.ObjectSaleType = 0; - rootPart.SalePrice = 10; + List partList = new List(group.Children.Values); - if (Permissions.PropagatePermissions()) - { - if ((item.CurrentPermissions & 8) != 0) - { - foreach (SceneObjectPart part in partList) - { - part.EveryoneMask = item.EveryOnePermissions; - part.NextOwnerMask = item.NextPermissions; - part.GroupMask = 0; // DO NOT propagate here - } - } - group.ApplyNextOwnerPermissions(); - } - } + group.SetGroup(remoteClient.ActiveGroupId, remoteClient); + if (rootPart.OwnerID != item.Owner) + { + //Need to kill the for sale here + rootPart.ObjectSaleType = 0; + rootPart.SalePrice = 10; - foreach (SceneObjectPart part in partList) + if (Permissions.PropagatePermissions()) + { + if ((item.CurrentPermissions & 8) != 0) { - if (part.OwnerID != item.Owner) - { - part.LastOwnerID = part.OwnerID; - part.OwnerID = item.Owner; - part.Inventory.ChangeInventoryOwner(item.Owner); - } - else if (((item.CurrentPermissions & 8) != 0) && (!attachment)) // Slam! + foreach (SceneObjectPart part in partList) { part.EveryoneMask = item.EveryOnePermissions; part.NextOwnerMask = item.NextPermissions; - part.GroupMask = 0; // DO NOT propagate here } } + group.ApplyNextOwnerPermissions(); + } + } - rootPart.TrimPermissions(); + foreach (SceneObjectPart part in partList) + { + if (part.OwnerID != item.Owner) + { + part.LastOwnerID = part.OwnerID; + part.OwnerID = item.Owner; + part.Inventory.ChangeInventoryOwner(item.Owner); + } + else if (((item.CurrentPermissions & 8) != 0) && (!attachment)) // Slam! + { + part.EveryoneMask = item.EveryOnePermissions; + part.NextOwnerMask = item.NextPermissions; - if (!attachment) - { - if (group.RootPart.Shape.PCode == (byte)PCode.Prim) - { - group.ClearPartAttachmentData(); - } - } + part.GroupMask = 0; // DO NOT propagate here + } + } - if (!attachment) - { - // Fire on_rez - group.CreateScriptInstances(0, true, DefaultScriptEngine, 0); + rootPart.TrimPermissions(); - rootPart.ScheduleFullUpdate(); - } + if (!attachment) + { + if (group.RootPart.Shape.PCode == (byte)PCode.Prim) + { + group.ClearPartAttachmentData(); + } + } - if (!Permissions.BypassPermissions()) - { - if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) - { - // If this is done on attachments, no - // copy ones will be lost, so avoid it - // - if (!attachment) - userInfo.DeleteItem(item.ID); - } - } + if (!attachment) + { + // Fire on_rez + group.CreateScriptInstances(0, true, DefaultScriptEngine, 0); + + rootPart.ScheduleFullUpdate(); + } - return rootPart.ParentGroup; + if (!Permissions.BypassPermissions()) + { + if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) + { + // If this is done on attachments, no + // copy ones will be lost, so avoid it + // + if (!attachment) + InventoryService.DeleteItem(item); } } + + return rootPart.ParentGroup; } - else - m_log.WarnFormat("[AGENT INVENTORY]: Root folder not found in {0}", RegionInfo.RegionName); } - else - m_log.WarnFormat("[AGENT INVENTORY]: User profile not found in {0}", RegionInfo.RegionName); return null; } @@ -2681,13 +2460,9 @@ namespace OpenSim.Region.Framework.Scenes ava.UpdateDatabase(remoteClient.AgentId, presence.Appearance); } part.ParentGroup.DetachToGround(); - CachedUserInfo userInfo = - CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) - { - userInfo.DeleteItem(inventoryID); - remoteClient.SendRemoveInventoryItem(inventoryID); - } + + InventoryService.DeleteItem(new InventoryItemBase(inventoryID)); + remoteClient.SendRemoveInventoryItem(inventoryID); } SendAttachEvent(part.ParentGroup.LocalId, itemID, UUID.Zero); } diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index 113918d..ba858ed 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -435,17 +435,7 @@ namespace OpenSim.Region.Framework.Scenes return; } - CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (null == userProfile) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find user profile for {0} {1}", - remoteClient.Name, remoteClient.AgentId); - return; - } - - userProfile.SendInventoryDecendents(remoteClient, folderID, fetchFolders, fetchItems); + SendInventoryUpdate(remoteClient, new InventoryFolderBase(folderID), fetchFolders, fetchItems); } /// @@ -543,19 +533,10 @@ namespace OpenSim.Region.Framework.Scenes public void HandleCreateInventoryFolder(IClientAPI remoteClient, UUID folderID, ushort folderType, string folderName, UUID parentID) { - CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (null == userProfile) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find user profile for {0} {1}", - remoteClient.Name, remoteClient.AgentId); - return; - } - - if (!userProfile.CreateFolder(folderName, folderID, folderType, parentID)) + InventoryFolderBase folder = new InventoryFolderBase(folderID, folderName, remoteClient.AgentId, (short)folderType, parentID, 1); + if (!InventoryService.AddFolder(folder)) { - m_log.ErrorFormat( + m_log.WarnFormat( "[AGENT INVENTORY]: Failed to move create folder for user {0} {1}", remoteClient.Name, remoteClient.AgentId); } diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 919075c..0c99166 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -3510,59 +3510,53 @@ namespace OpenSim.Region.Framework.Scenes case 2: // Sell a copy string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(group); - CachedUserInfo userInfo = - CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); + uint perms=group.GetEffectivePermissions(); - if (userInfo != null) + if ((perms & (uint)PermissionMask.Transfer) == 0) { - uint perms=group.GetEffectivePermissions(); - - if ((perms & (uint)PermissionMask.Transfer) == 0) - { - m_dialogModule.SendAlertToUser(remoteClient, "This item doesn't appear to be for sale"); - return false; - } + m_dialogModule.SendAlertToUser(remoteClient, "This item doesn't appear to be for sale"); + return false; + } - AssetBase asset = CreateAsset( - group.GetPartName(localID), - group.GetPartDescription(localID), - (sbyte)AssetType.Object, - Utils.StringToBytes(sceneObjectXml)); - AssetService.Store(asset); - - InventoryItemBase item = new InventoryItemBase(); - item.CreatorId = part.CreatorID.ToString(); - - item.ID = UUID.Random(); - item.Owner = remoteClient.AgentId; - item.AssetID = asset.FullID; - item.Description = asset.Description; - item.Name = asset.Name; - item.AssetType = asset.Type; - item.InvType = (int)InventoryType.Object; - item.Folder = categoryID; - - uint nextPerms=(perms & 7) << 13; - if ((nextPerms & (uint)PermissionMask.Copy) == 0) - perms &= ~(uint)PermissionMask.Copy; - if ((nextPerms & (uint)PermissionMask.Transfer) == 0) - perms &= ~(uint)PermissionMask.Transfer; - if ((nextPerms & (uint)PermissionMask.Modify) == 0) - perms &= ~(uint)PermissionMask.Modify; - - item.BasePermissions = perms & part.NextOwnerMask; - item.CurrentPermissions = perms & part.NextOwnerMask; - item.NextPermissions = part.NextOwnerMask; - item.EveryOnePermissions = part.EveryoneMask & - part.NextOwnerMask; - item.GroupPermissions = part.GroupMask & - part.NextOwnerMask; - item.CurrentPermissions |= 8; // Slam! - item.CreationDate = Util.UnixTimeSinceEpoch(); - - userInfo.AddItem(item); + AssetBase asset = CreateAsset( + group.GetPartName(localID), + group.GetPartDescription(localID), + (sbyte)AssetType.Object, + Utils.StringToBytes(sceneObjectXml)); + AssetService.Store(asset); + + InventoryItemBase item = new InventoryItemBase(); + item.CreatorId = part.CreatorID.ToString(); + + item.ID = UUID.Random(); + item.Owner = remoteClient.AgentId; + item.AssetID = asset.FullID; + item.Description = asset.Description; + item.Name = asset.Name; + item.AssetType = asset.Type; + item.InvType = (int)InventoryType.Object; + item.Folder = categoryID; + + uint nextPerms=(perms & 7) << 13; + if ((nextPerms & (uint)PermissionMask.Copy) == 0) + perms &= ~(uint)PermissionMask.Copy; + if ((nextPerms & (uint)PermissionMask.Transfer) == 0) + perms &= ~(uint)PermissionMask.Transfer; + if ((nextPerms & (uint)PermissionMask.Modify) == 0) + perms &= ~(uint)PermissionMask.Modify; + + item.BasePermissions = perms & part.NextOwnerMask; + item.CurrentPermissions = perms & part.NextOwnerMask; + item.NextPermissions = part.NextOwnerMask; + item.EveryOnePermissions = part.EveryoneMask & + part.NextOwnerMask; + item.GroupPermissions = part.GroupMask & + part.NextOwnerMask; + item.CurrentPermissions |= 8; // Slam! + item.CreationDate = Util.UnixTimeSinceEpoch(); + + if (InventoryService.AddItem(item)) remoteClient.SendInventoryItemCreateUpdate(item, 0); - } else { m_dialogModule.SendAlertToUser(remoteClient, "Cannot buy now. Your inventory is unavailable"); @@ -3577,8 +3571,8 @@ namespace OpenSim.Region.Framework.Scenes foreach (UUID invID in invList) { - TaskInventoryItem item = part.Inventory.GetInventoryItem(invID); - if ((item.CurrentPermissions & + TaskInventoryItem item1 = part.Inventory.GetInventoryItem(invID); + if ((item1.CurrentPermissions & (uint)PermissionMask.Transfer) == 0) { okToSell = false; diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 0e0999a..9599379 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -542,7 +542,7 @@ namespace OpenSim.Region.Framework.Scenes group.DetachToInventoryPrep(); m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString()); - m_parentScene.updateKnownAsset(remoteClient, group, + m_parentScene.UpdateKnownItem(remoteClient, group, group.GetFromAssetID(), group.OwnerID); m_parentScene.DeleteSceneObject(group, false); return; @@ -1307,7 +1307,7 @@ namespace OpenSim.Region.Framework.Scenes group.UpdateGroupPosition(pos); group.RootPart.IsAttachment = false; group.AbsolutePosition = group.RootPart.AttachedPos; - m_parentScene.updateKnownAsset(remoteClient, group, group.GetFromAssetID(), group.OwnerID); + m_parentScene.UpdateKnownItem(remoteClient, group, group.GetFromAssetID(), group.OwnerID); group.SetAttachmentPoint(attachmentPoint); } -- cgit v1.1 From 6b9cc6c48d7b49cc4bce5dce4e66d7856a093b75 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 13 Aug 2009 11:30:29 -0700 Subject: Inventory redirects from CachedUserInfo to InventoryService COMPLETE! --- .../Region/ClientStack/LindenUDP/LLClientView.cs | 17 +- .../Agent/TextureDownload/TextureDownloadModule.cs | 4 +- .../Avatar/AvatarFactory/AvatarFactoryModule.cs | 45 ++--- .../World/Permissions/PermissionsModule.cs | 46 +---- .../Framework/Scenes/Hypergrid/HGAssetMapper.cs | 50 +++--- .../Scenes/Hypergrid/HGScene.Inventory.cs | 31 ++-- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 194 +++++++-------------- .../Framework/Scenes/Scene.PacketHandlers.cs | 129 +------------- .../Framework/Scenes/SceneCommunicationService.cs | 10 +- OpenSim/Region/Framework/Scenes/ScenePresence.cs | 10 +- 10 files changed, 146 insertions(+), 390 deletions(-) diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index 7633b7b..aaa236c 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -6609,20 +6609,9 @@ namespace OpenSim.Region.ClientStack.LindenUDP } else // Agent { - CachedUserInfo userInfo = ((Scene)m_scene).CommsManager.UserProfileCacheService.GetUserDetails(AgentId); - if (userInfo == null) - { - m_log.ErrorFormat( - "[CLIENT]: Could not resolve user {0} for caps inventory update", - AgentId); - - break; - } - - if (userInfo.RootFolder == null) - break; - - InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(itemID); + //InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(itemID); + IInventoryService invService = m_scene.RequestModuleInterface(); + InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(itemID)); if (assetRequestItem == null) { assetRequestItem = ((Scene)m_scene).CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); diff --git a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs index fa5369f..956dd10 100644 --- a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs @@ -37,6 +37,7 @@ using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using BlockingQueue = OpenSim.Framework.BlockingQueue; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Agent.TextureDownload { @@ -217,7 +218,8 @@ namespace OpenSim.Region.CoreModules.Agent.TextureDownload if (profile == null) // Deny unknown user return; - if (profile.RootFolder == null) // Deny no inventory + IInventoryService invService = scene.InventoryService; + if (invService.GetRootFolder(client.AgentId) == null) // Deny no inventory return; if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 33dc7a5..547f923 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -34,6 +34,7 @@ using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory { @@ -115,9 +116,11 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory } - public void SetAppearanceAssets(CachedUserInfo profile, ref AvatarAppearance appearance) + public void SetAppearanceAssets(UUID userID, ref AvatarAppearance appearance) { - if (profile.RootFolder != null) + IInventoryService invService = m_scene.InventoryService; + + if (invService.GetRootFolder(userID) != null) { for (int i = 0; i < 13; i++) { @@ -127,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory } else { - InventoryItemBase baseItem = profile.RootFolder.FindItem(appearance.Wearables[i].ItemID); + InventoryItemBase baseItem = invService.QueryItem(new InventoryItemBase(appearance.Wearables[i].ItemID)); if (baseItem != null) { @@ -143,7 +146,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory } else { - m_log.Error("[APPEARANCE]: you have no inventory, appearance stuff isn't going to work"); + m_log.WarnFormat("[APPEARANCE]: user {0} has no inventory, appearance isn't going to work", userID); } } @@ -163,8 +166,6 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory return; } - CachedUserInfo profile = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(clientView.AgentId); - AvatarAppearance avatAppearance = null; if (!TryGetAvatarAppearance(clientView.AgentId, out avatAppearance)) { @@ -174,34 +175,18 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory //m_log.DebugFormat("[APPEARANCE]: Received wearables for {0}", clientView.Name); - if (profile != null) + foreach (AvatarWearingArgs.Wearable wear in e.NowWearing) { - if (profile.RootFolder != null) + if (wear.Type < 13) { - foreach (AvatarWearingArgs.Wearable wear in e.NowWearing) - { - if (wear.Type < 13) - { - avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID; - } - } - - SetAppearanceAssets(profile, ref avatAppearance); - - m_scene.CommsManager.AvatarService.UpdateUserAppearance(clientView.AgentId, avatAppearance); - avatar.Appearance = avatAppearance; - } - else - { - m_log.WarnFormat( - "[APPEARANCE]: Inventory has not yet been received for {0}, cannot set wearables", - clientView.Name); + avatAppearance.Wearables[wear.Type].ItemID = wear.ItemID; } } - else - { - m_log.WarnFormat("[APPEARANCE]: Cannot set wearables for {0}, no user profile found", clientView.Name); - } + + SetAppearanceAssets(avatar.UUID, ref avatAppearance); + + m_scene.CommsManager.AvatarService.UpdateUserAppearance(clientView.AgentId, avatAppearance); + avatar.Appearance = avatAppearance; } public static void GetDefaultAvatarAppearance(out AvatarWearable[] wearables, out byte[] visualParams) diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 6db9cbf..8f99395 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs @@ -35,6 +35,7 @@ using OpenSim.Framework; using OpenSim.Framework.Communications.Cache; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; +using OpenSim.Services.Interfaces; // Temporary fix of wrong GroupPowers constants in OpenMetaverse library enum GroupPowers : long @@ -964,19 +965,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions if (objectID == UUID.Zero) // User inventory { - CachedUserInfo userInfo = - scene.CommsManager.UserProfileCacheService.GetUserDetails(user); - - if (userInfo == null) - { - m_log.ErrorFormat("[PERMISSIONS]: Could not find user {0} for edit notecard check", user); - return false; - } - - if (userInfo.RootFolder == null) - return false; - - InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(notecard); + IInventoryService invService = m_scene.InventoryService; + InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(notecard)); if (assetRequestItem == null) // Library item { assetRequestItem = scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard); @@ -1394,19 +1384,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions if (objectID == UUID.Zero) // User inventory { - CachedUserInfo userInfo = - scene.CommsManager.UserProfileCacheService.GetUserDetails(user); - - if (userInfo == null) - { - m_log.ErrorFormat("[PERMISSIONS]: Could not find user {0} for administrator check", user); - return false; - } - - if (userInfo.RootFolder == null) - return false; - - InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(script); + IInventoryService invService = m_scene.InventoryService; + InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(script)); if (assetRequestItem == null) // Library item { assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(script); @@ -1499,19 +1478,8 @@ namespace OpenSim.Region.CoreModules.World.Permissions if (objectID == UUID.Zero) // User inventory { - CachedUserInfo userInfo = - scene.CommsManager.UserProfileCacheService.GetUserDetails(user); - - if (userInfo == null) - { - m_log.ErrorFormat("[PERMISSIONS]: Could not find user {0} for view notecard check", user); - return false; - } - - if (userInfo.RootFolder == null) - return false; - - InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(notecard); + IInventoryService invService = m_scene.InventoryService; + InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(notecard)); if (assetRequestItem == null) // Library item { assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard); diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs index 4224198..5d65f98 100644 --- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs +++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGAssetMapper.cs @@ -201,31 +201,31 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid } } - public InventoryItemBase Get(InventoryItemBase item, UUID rootFolder, CachedUserInfo userInfo) - { - InventoryClient invCli = null; - string inventoryURL = UserInventoryURL(item.Owner); - if (!m_inventoryServers.TryGetValue(inventoryURL, out invCli)) - { - m_log.Debug("[HGScene]: Starting new InventorytClient for " + inventoryURL); - invCli = new InventoryClient(inventoryURL); - m_inventoryServers.Add(inventoryURL, invCli); - } - - item = invCli.GetInventoryItem(item); - if (item != null) - { - // Change the folder, stick it in root folder, all items flattened out here in this region cache - item.Folder = rootFolder; - //userInfo.AddItem(item); don't use this, it calls back to the inventory server - lock (userInfo.RootFolder.Items) - { - userInfo.RootFolder.Items[item.ID] = item; - } - - } - return item; - } + //public InventoryItemBase Get(InventoryItemBase item, UUID rootFolder, CachedUserInfo userInfo) + //{ + // InventoryClient invCli = null; + // string inventoryURL = UserInventoryURL(item.Owner); + // if (!m_inventoryServers.TryGetValue(inventoryURL, out invCli)) + // { + // m_log.Debug("[HGScene]: Starting new InventorytClient for " + inventoryURL); + // invCli = new InventoryClient(inventoryURL); + // m_inventoryServers.Add(inventoryURL, invCli); + // } + + // item = invCli.GetInventoryItem(item); + // if (item != null) + // { + // // Change the folder, stick it in root folder, all items flattened out here in this region cache + // item.Folder = rootFolder; + // //userInfo.AddItem(item); don't use this, it calls back to the inventory server + // lock (userInfo.RootFolder.Items) + // { + // userInfo.RootFolder.Items[item.ID] = item; + // } + + // } + // return item; + //} public void Post(UUID assetID, UUID ownerID) { diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs index cb6794e..1b93f46 100644 --- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs @@ -117,25 +117,20 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid if (fromTaskID.Equals(UUID.Zero)) { - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - if (userInfo != null) + InventoryItemBase item = new InventoryItemBase(itemID); + item.Owner = remoteClient.AgentId; + item = InventoryService.QueryItem(item); + //if (item == null) + //{ // Fetch the item + // item = new InventoryItemBase(); + // item.Owner = remoteClient.AgentId; + // item.ID = itemID; + // item = m_assMapper.Get(item, userInfo.RootFolder.ID, userInfo); + //} + if (item != null) { - if (userInfo.RootFolder != null) - { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); - if (item == null) - { // Fetch the item - item = new InventoryItemBase(); - item.Owner = remoteClient.AgentId; - item.ID = itemID; - item = m_assMapper.Get(item, userInfo.RootFolder.ID, userInfo); - } - if (item != null) - { - m_assMapper.Get(item.AssetID, remoteClient.AgentId); - - } - } + m_assMapper.Get(item.AssetID, remoteClient.AgentId); + } } diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 80f71b3..cd91e8c 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -558,24 +558,9 @@ namespace OpenSim.Region.Framework.Scenes if (item == null) { - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(oldAgentID); - if (userInfo == null) - { - m_log.Error("[AGENT INVENTORY]: Failed to find user " + oldAgentID.ToString()); - return; - } - - if (userInfo.RootFolder != null) - { - item = userInfo.RootFolder.FindItem(oldItemID); + item = InventoryService.QueryItem(new InventoryItemBase(oldItemID)); - if (item == null) - { - m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); - return; - } - } - else + if (item == null) { m_log.Error("[AGENT INVENTORY]: Failed to find item " + oldItemID.ToString()); return; @@ -822,28 +807,15 @@ namespace OpenSim.Region.Framework.Scenes /// private void RemoveInventoryFolder(IClientAPI remoteClient, UUID folderID) { - CachedUserInfo userInfo - = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (userInfo == null) - { - m_log.Warn("[AGENT INVENTORY]: Failed to find user " + remoteClient.AgentId.ToString()); - return; - } + // Unclear is this handler is ever called by the Linden client, but it might - if (userInfo.RootFolder != null) + InventoryFolderBase folder = new InventoryFolderBase(folderID); + folder.Owner = remoteClient.AgentId; + InventoryFolderBase trash = InventoryService.GetFolderForType(remoteClient.AgentId, AssetType.TrashFolder); + if (trash != null) { - InventoryItemBase folder = userInfo.RootFolder.FindItem(folderID); - - if (folder != null) - { - m_log.WarnFormat( - "[AGENT INVENTORY]: Remove folder not implemented in request by {0} {1} for {2}", - remoteClient.Name, remoteClient.AgentId, folderID); - - // doesn't work just yet, commented out. will fix in next patch. - // userInfo.DeleteItem(folder); - } + folder.ParentID = trash.ID; + InventoryService.MoveFolder(folder); } } @@ -1060,20 +1032,7 @@ namespace OpenSim.Region.Framework.Scenes return MoveTaskInventoryItem(avatar.ControllingClient, folderId, part, itemId); } else - { - CachedUserInfo profile = CommsManager.UserProfileCacheService.GetUserDetails(avatarId); - if (profile == null || profile.RootFolder == null) - { - m_log.ErrorFormat( - "[PRIM INVENTORY]: " + - "Avatar {0} cannot be found to add item", - avatarId); - return null; - } - - if (!profile.HasReceivedInventory) - profile.FetchInventory(); - + { InventoryItemBase agentItem = CreateAgentInventoryItemFromTask(avatarId, part, itemId); if (agentItem == null) @@ -1265,39 +1224,33 @@ namespace OpenSim.Region.Framework.Scenes UUID copyID = UUID.Random(); if (itemID != UUID.Zero) { - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); - if (userInfo != null && userInfo.RootFolder != null) + // Try library + if (null == item) { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); - - // Try library - // XXX clumsy, possibly should be one call - if (null == item) - { - item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); - } + item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); + } - if (item != null) - { - part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID); - m_log.InfoFormat( - "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", - item.Name, primLocalID, remoteClient.Name); - part.GetProperties(remoteClient); - if (!Permissions.BypassPermissions()) - { - if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) - RemoveInventoryItem(remoteClient, itemID); - } - } - else + if (item != null) + { + part.ParentGroup.AddInventoryItem(remoteClient, primLocalID, item, copyID); + m_log.InfoFormat( + "[PRIM INVENTORY]: Update with item {0} requested of prim {1} for {2}", + item.Name, primLocalID, remoteClient.Name); + part.GetProperties(remoteClient); + if (!Permissions.BypassPermissions()) { - m_log.ErrorFormat( - "[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!", - itemID, remoteClient.Name); + if ((item.CurrentPermissions & (uint)PermissionMask.Copy) == 0) + RemoveInventoryItem(remoteClient, itemID); } } + else + { + m_log.ErrorFormat( + "[PRIM INVENTORY]: Could not find inventory item {0} to update for {1}!", + itemID, remoteClient.Name); + } } } else // Updating existing item with new perms etc @@ -1334,53 +1287,48 @@ namespace OpenSim.Region.Framework.Scenes if (itemID != UUID.Zero) // transferred from an avatar inventory to the prim's inventory { - CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); - if (userInfo != null && userInfo.RootFolder != null) + // Try library + // XXX clumsy, possibly should be one call + if (null == item) { - InventoryItemBase item = userInfo.RootFolder.FindItem(itemID); - - // Try library - // XXX clumsy, possibly should be one call - if (null == item) - { - item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); - } + item = CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); + } - if (item != null) + if (item != null) + { + SceneObjectPart part = GetSceneObjectPart(localID); + if (part != null) { - SceneObjectPart part = GetSceneObjectPart(localID); - if (part != null) - { - if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) - return; + if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) + return; - part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID); - // TODO: switch to posting on_rez here when scripts - // have state in inventory - part.Inventory.CreateScriptInstance(copyID, 0, false, DefaultScriptEngine, 0); + part.ParentGroup.AddInventoryItem(remoteClient, localID, item, copyID); + // TODO: switch to posting on_rez here when scripts + // have state in inventory + part.Inventory.CreateScriptInstance(copyID, 0, false, DefaultScriptEngine, 0); - // m_log.InfoFormat("[PRIMINVENTORY]: " + - // "Rezzed script {0} into prim local ID {1} for user {2}", - // item.inventoryName, localID, remoteClient.Name); - part.GetProperties(remoteClient); - } - else - { - m_log.ErrorFormat( - "[PRIM INVENTORY]: " + - "Could not rez script {0} into prim local ID {1} for user {2}" - + " because the prim could not be found in the region!", - item.Name, localID, remoteClient.Name); - } + // m_log.InfoFormat("[PRIMINVENTORY]: " + + // "Rezzed script {0} into prim local ID {1} for user {2}", + // item.inventoryName, localID, remoteClient.Name); + part.GetProperties(remoteClient); } else { m_log.ErrorFormat( - "[PRIM INVENTORY]: Could not find script inventory item {0} to rez for {1}!", - itemID, remoteClient.Name); + "[PRIM INVENTORY]: " + + "Could not rez script {0} into prim local ID {1} for user {2}" + + " because the prim could not be found in the region!", + item.Name, localID, remoteClient.Name); } } + else + { + m_log.ErrorFormat( + "[PRIM INVENTORY]: Could not find script inventory item {0} to rez for {1}!", + itemID, remoteClient.Name); + } } else // script has been rezzed directly into a prim's inventory { @@ -1670,26 +1618,6 @@ namespace OpenSim.Region.Framework.Scenes } } - private bool WaitForInventory(CachedUserInfo info) - { - // 200 Seconds wait. This is called in the context of the - // background delete thread, so we can afford to waste time - // here. - // - int count = 200; - - while (count > 0) - { - System.Threading.Thread.Sleep(100); - count--; - if (info.HasReceivedInventory) - return true; - } - m_log.DebugFormat("Timed out waiting for inventory of user {0}", - info.UserProfile.ID.ToString()); - return false; - } - /// /// Delete a scene object from a scene and place in the given avatar's inventory. /// Returns the UUID of the newly created asset. diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index ba858ed..e2debe5 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -382,31 +382,13 @@ namespace OpenSim.Region.Framework.Scenes return; } - CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (null == userProfile) + InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + + if (item != null) { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find user profile for {0} {1}", - remoteClient.Name, remoteClient.AgentId); - return; - } - - if (userProfile.HasReceivedInventory) - { - InventoryItemBase item = null; - if (userProfile.RootFolder == null) - m_log.ErrorFormat( - "[AGENT INVENTORY]: User {0} {1} does not have a root folder.", - remoteClient.Name, remoteClient.AgentId); - else - item = userProfile.RootFolder.FindItem(itemID); - - if (item != null) - { - remoteClient.SendInventoryItemDetails(ownerID, item); - } + remoteClient.SendInventoryItemDetails(ownerID, item); } + // else shouldn't we send an alert message? } /// @@ -442,6 +424,7 @@ namespace OpenSim.Region.Framework.Scenes /// Handle the caps inventory descendents fetch. /// /// Since the folder structure is sent to the client on login, I believe we only need to handle items. + /// Diva comment 8/13/2009: what if someone gave us a folder in the meantime?? /// /// /// @@ -467,59 +450,10 @@ namespace OpenSim.Region.Framework.Scenes { return fold.RequestListOfItems(); } - - CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(agentID); - - if (null == userProfile) - { - m_log.ErrorFormat("[AGENT INVENTORY]: Could not find user profile for {0}", agentID); - return null; - } - - // XXX: When a client crosses into a scene, their entire inventory is fetched - // asynchronously. If the client makes a request before the inventory is received, we need - // to give the inventory a chance to come in. - // - // This is a crude way of dealing with that by retrying the lookup. It's not quite as bad - // in CAPS as doing this with the udp request, since here it won't hold up other packets. - // In fact, here we'll be generous and try for longer. - if (!userProfile.HasReceivedInventory) - { - int attempts = 0; - while (attempts++ < 30) - { - m_log.DebugFormat( - "[INVENTORY CACHE]: Poll number {0} for inventory items in folder {1} for user {2}", - attempts, folderID, agentID); - Thread.Sleep(2000); - - if (userProfile.HasReceivedInventory) - { - break; - } - } - } + InventoryCollection contents = InventoryService.GetFolderContent(agentID, folderID); + return contents.Items; - if (userProfile.HasReceivedInventory) - { - if ((fold = userProfile.RootFolder.FindFolder(folderID)) != null) - { - return fold.RequestListOfItems(); - } - else - { - m_log.WarnFormat( - "[AGENT INVENTORY]: Could not find folder {0} requested by user {1}", - folderID, agentID); - return null; - } - } - else - { - m_log.ErrorFormat("[INVENTORY CACHE]: Could not find root folder for user {0}", agentID); - return null; - } } /// @@ -579,34 +513,8 @@ namespace OpenSim.Region.Framework.Scenes } } - /// - /// Handle an inventory folder move request from the client. - /// - /// - /// - /// public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) { - CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (null == userProfile) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find user profile for {0} {1}", - remoteClient.Name, remoteClient.AgentId); - return; - } - - if (!userProfile.MoveFolder(folderID, parentID)) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to move folder {0} to {1} for user {2}", - folderID, parentID, remoteClient.Name); - } - } - - public void HandleMoveInventoryFolder2(IClientAPI remoteClient, UUID folderID, UUID parentID) - { InventoryFolderBase folder = new InventoryFolderBase(folderID); folder = InventoryService.QueryFolder(folder); if (folder != null) @@ -628,27 +536,8 @@ namespace OpenSim.Region.Framework.Scenes /// /// /// - public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID) - { - CachedUserInfo userProfile = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId); - - if (null == userProfile) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Could not find user profile for {0} {1}", - remoteClient.Name, remoteClient.AgentId); - return; - } - if (!userProfile.PurgeFolder(folderID)) - { - m_log.ErrorFormat( - "[AGENT INVENTORY]: Failed to purge folder for user {0} {1}", - remoteClient.Name, remoteClient.AgentId); - } - } - - public void HandlePurgeInventoryDescendents2(IClientAPI remoteClient, UUID folderID) + public void HandlePurgeInventoryDescendents(IClientAPI remoteClient, UUID folderID) { InventoryFolderBase folder = new InventoryFolderBase(folderID); diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index 0140faa..af2753c 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs @@ -1249,11 +1249,11 @@ namespace OpenSim.Region.Framework.Scenes } else // Not successful { - CachedUserInfo userInfo = m_commsProvider.UserProfileCacheService.GetUserDetails(agent.UUID); - if (userInfo != null) - { - userInfo.FetchInventory(); - } + //CachedUserInfo userInfo = m_commsProvider.UserProfileCacheService.GetUserDetails(agent.UUID); + //if (userInfo != null) + //{ + // userInfo.FetchInventory(); + //} agent.RestoreInCurrentScene(); } // In any case diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 4695df7..fc8b62e 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs @@ -833,11 +833,11 @@ namespace OpenSim.Region.Framework.Scenes m_scene.SwapRootAgentCount(false); - CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(m_uuid); - if (userInfo != null) - userInfo.FetchInventory(); - else - m_log.ErrorFormat("[SCENE]: Could not find user info for {0} when making it a root agent", m_uuid); + //CachedUserInfo userInfo = m_scene.CommsManager.UserProfileCacheService.GetUserDetails(m_uuid); + //if (userInfo != null) + // userInfo.FetchInventory(); + //else + // m_log.ErrorFormat("[SCENE]: Could not find user info for {0} when making it a root agent", m_uuid); // On the next prim update, all objects will be sent // -- cgit v1.1 From 5246dc33dcfc51b7ebb19b269159df3991029350 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 13 Aug 2009 14:10:12 -0700 Subject: Renamed QueryItem/QueryFolder to GetItem/GetFolder. The word 'query' starting to get on my nerves. --- .../Communications/Cache/CachedUserInfo.cs | 4 ++-- .../Tests/Cache/UserProfileCacheServiceTests.cs | 14 ++++++------- .../Communications/Tests/LoginServiceTests.cs | 4 ++-- .../Region/ClientStack/LindenUDP/LLClientView.cs | 2 +- .../Avatar/AvatarFactory/AvatarFactoryModule.cs | 2 +- .../CoreModules/Avatar/Gestures/GesturesModule.cs | 4 ++-- .../Inventory/Transfer/InventoryTransferModule.cs | 8 ++++---- .../Inventory/BaseInventoryConnector.cs | 4 ++-- .../Inventory/HGInventoryBroker.cs | 8 ++++---- .../Inventory/LocalInventoryServiceConnector.cs | 8 ++++---- .../Inventory/RemoteInventoryServiceConnector.cs | 4 ++-- .../World/Permissions/PermissionsModule.cs | 6 +++--- .../Scenes/Hypergrid/HGScene.Inventory.cs | 2 +- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 22 ++++++++++---------- .../Framework/Scenes/Scene.PacketHandlers.cs | 4 ++-- .../Framework/Scenes/SceneCommunicationService.cs | 24 +++++++++++----------- .../Inventory/InventoryServerInConnector.cs | 4 ++-- .../QuickAndDirtyInventoryServiceConnector.cs | 4 ++-- OpenSim/Services/Interfaces/IInventoryService.cs | 4 ++-- .../Services/InventoryService/InventoryService.cs | 4 ++-- OpenSim/Tests/Common/Mock/TestInventoryService.cs | 4 ++-- 21 files changed, 70 insertions(+), 70 deletions(-) diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 8ee1b1a..ca641d0 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -747,7 +747,7 @@ namespace OpenSim.Framework.Communications.Cache InventoryItemBase itemInfo = null; - itemInfo = m_InventoryService.QueryItem(item); + itemInfo = m_InventoryService.GetItem(item); if (itemInfo != null) { @@ -784,7 +784,7 @@ namespace OpenSim.Framework.Communications.Cache InventoryFolderBase folderInfo = null; - folderInfo = m_InventoryService.QueryFolder(folder); + folderInfo = m_InventoryService.GetFolder(folder); if (folderInfo != null) { diff --git a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs index fe88cf5..670c9ff 100644 --- a/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/Cache/UserProfileCacheServiceTests.cs @@ -186,14 +186,14 @@ namespace OpenSim.Framework.Communications.Tests Assert.That( userInfo.CreateFolder("testFolder1", folderId, (ushort)AssetType.Animation, missingFolderId), Is.False); - Assert.That(myScene.InventoryService.QueryFolder(myFolder), Is.Null); + Assert.That(myScene.InventoryService.GetFolder(myFolder), Is.Null); Assert.That(userInfo.RootFolder.ContainsChildFolder(missingFolderId), Is.False); Assert.That(userInfo.RootFolder.FindFolder(folderId), Is.Null); // 2: Try a folder create that should work Assert.That( userInfo.CreateFolder("testFolder2", folderId, (ushort)AssetType.Animation, userInfo.RootFolder.ID), Is.True); - Assert.That(myScene.InventoryService.QueryFolder(myFolder), Is.Not.Null); + Assert.That(myScene.InventoryService.GetFolder(myFolder), Is.Not.Null); Assert.That(userInfo.RootFolder.ContainsChildFolder(folderId), Is.True); } @@ -228,7 +228,7 @@ namespace OpenSim.Framework.Communications.Tests Assert.That(newFolderName1, Is.EqualTo(folder1.Name)); Assert.That(folderType1, Is.EqualTo((ushort)folder1.Type)); - InventoryFolderBase dataFolder1 = myScene.InventoryService.QueryFolder(myFolder); + InventoryFolderBase dataFolder1 = myScene.InventoryService.GetFolder(myFolder); Assert.That(newFolderName1, Is.EqualTo(dataFolder1.Name)); Assert.That(folderType1, Is.EqualTo((ushort)dataFolder1.Type)); } @@ -254,7 +254,7 @@ namespace OpenSim.Framework.Communications.Tests Assert.That(folder2.ContainsChildFolder(folder1Id), Is.True); Assert.That(rootFolder.ContainsChildFolder(folder1Id), Is.False); - InventoryFolderBase dataFolder1 = myScene.InventoryService.QueryFolder(myFolder2); + InventoryFolderBase dataFolder1 = myScene.InventoryService.GetFolder(myFolder2); Assert.That(newFolderName2, Is.EqualTo(dataFolder1.Name)); Assert.That(folderType2, Is.EqualTo((ushort)dataFolder1.Type)); Assert.That(folder2Id, Is.EqualTo(dataFolder1.ParentID)); @@ -296,7 +296,7 @@ namespace OpenSim.Framework.Communications.Tests InventoryFolderBase myFolder = new InventoryFolderBase(); myFolder.ID = folderToMoveId; Assert.That(folder2.ContainsChildFolder(folderToMoveId), Is.True); - Assert.That(myScene.InventoryService.QueryFolder(myFolder).ParentID, Is.EqualTo(folder2Id)); + Assert.That(myScene.InventoryService.GetFolder(myFolder).ParentID, Is.EqualTo(folder2Id)); Assert.That(folder1.ContainsChildFolder(folderToMoveId), Is.False); } @@ -322,13 +322,13 @@ namespace OpenSim.Framework.Communications.Tests myFolder.ID = folder1Id; userInfo.CreateFolder("folder1", folder1Id, (ushort)AssetType.Animation, rootFolder.ID); - Assert.That(myScene.InventoryService.QueryFolder(myFolder), Is.Not.Null); + Assert.That(myScene.InventoryService.GetFolder(myFolder), Is.Not.Null); // Test purge userInfo.PurgeFolder(rootFolder.ID); Assert.That(rootFolder.RequestListOfFolders(), Is.Empty); - Assert.That(myScene.InventoryService.QueryFolder(myFolder), Is.Null); + Assert.That(myScene.InventoryService.GetFolder(myFolder), Is.Null); } } } \ No newline at end of file diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index b1b7809..3161364 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs @@ -552,12 +552,12 @@ namespace OpenSim.Framework.Communications.Tests return false; } - public InventoryItemBase QueryItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { return null; } - public InventoryFolderBase QueryFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index aaa236c..a3e275d 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -6611,7 +6611,7 @@ namespace OpenSim.Region.ClientStack.LindenUDP { //InventoryItemBase assetRequestItem = userInfo.RootFolder.FindItem(itemID); IInventoryService invService = m_scene.RequestModuleInterface(); - InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(itemID)); if (assetRequestItem == null) { assetRequestItem = ((Scene)m_scene).CommsManager.UserProfileCacheService.LibraryRoot.FindItem(itemID); diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs index 547f923..582beee 100644 --- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs @@ -130,7 +130,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory } else { - InventoryItemBase baseItem = invService.QueryItem(new InventoryItemBase(appearance.Wearables[i].ItemID)); + InventoryItemBase baseItem = invService.GetItem(new InventoryItemBase(appearance.Wearables[i].ItemID)); if (baseItem != null) { diff --git a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs index e61648c..a68db1b 100644 --- a/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Gestures/GesturesModule.cs @@ -65,7 +65,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures { IInventoryService invService = m_scene.InventoryService; - InventoryItemBase item = invService.QueryItem(new InventoryItemBase(gestureId)); + InventoryItemBase item = invService.GetItem(new InventoryItemBase(gestureId)); if (item != null) { item.Flags = 1; @@ -80,7 +80,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Gestures { IInventoryService invService = m_scene.InventoryService; - InventoryItemBase item = invService.QueryItem(new InventoryItemBase(gestureId)); + InventoryItemBase item = invService.GetItem(new InventoryItemBase(gestureId)); if (item != null) { item.Flags = 0; diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs index b5650fd..5315c11 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Transfer/InventoryTransferModule.cs @@ -258,7 +258,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer UUID inventoryEntityID = new UUID(im.imSessionID); // The inventory item/folder, back from it's trip - InventoryItemBase item = invService.QueryItem(new InventoryItemBase(inventoryEntityID)); + InventoryItemBase item = invService.GetItem(new InventoryItemBase(inventoryEntityID)); InventoryFolderBase folder = null; if (item != null && trashFolder != null) @@ -271,7 +271,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer } else { - folder = invService.QueryFolder(new InventoryFolderBase(inventoryEntityID)); + folder = invService.GetFolder(new InventoryFolderBase(inventoryEntityID)); if (folder != null & trashFolder != null) { @@ -428,7 +428,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer // Fetch from service // - folder = invService.QueryFolder(folder); + folder = invService.GetFolder(folder); if (folder == null) { m_log.Debug("[INVENTORY TRANSFER] Can't find folder to give"); @@ -458,7 +458,7 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Transfer // Fetch from service // - item = invService.QueryItem(item); + item = invService.GetItem(item); if (item == null) { m_log.Debug("[INVENTORY TRANSFER] Can't find item to give"); diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index 375faf5..0526bc4 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs @@ -184,9 +184,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory /// true if the item was successfully deleted public abstract bool DeleteItem(InventoryItemBase item); - public abstract InventoryItemBase QueryItem(InventoryItemBase item); + public abstract InventoryItemBase GetItem(InventoryItemBase item); - public abstract InventoryFolderBase QueryFolder(InventoryFolderBase folder); + public abstract InventoryFolderBase GetFolder(InventoryFolderBase folder); /// /// Does the given user have an inventory structure? diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index 62b9bed..db4e7f4 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -387,13 +387,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } } - public override InventoryItemBase QueryItem(InventoryItemBase item) + public override InventoryItemBase GetItem(InventoryItemBase item) { if (item == null) return null; if (IsLocalGridUser(item.Owner)) - return m_GridService.QueryItem(item); + return m_GridService.GetItem(item); else { UUID sessionID = GetSessionID(item.Owner); @@ -402,13 +402,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory } } - public override InventoryFolderBase QueryFolder(InventoryFolderBase folder) + public override InventoryFolderBase GetFolder(InventoryFolderBase folder) { if (folder == null) return null; if (IsLocalGridUser(folder.Owner)) - return m_GridService.QueryFolder(folder); + return m_GridService.GetFolder(folder); else { UUID sessionID = GetSessionID(folder.Owner); diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index 6efe903..ccf06d1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -292,14 +292,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_InventoryService.DeleteItem(item); } - public override InventoryItemBase QueryItem(InventoryItemBase item) + public override InventoryItemBase GetItem(InventoryItemBase item) { - return m_InventoryService.QueryItem(item); + return m_InventoryService.GetItem(item); } - public override InventoryFolderBase QueryFolder(InventoryFolderBase folder) + public override InventoryFolderBase GetFolder(InventoryFolderBase folder) { - return m_InventoryService.QueryFolder(folder); + return m_InventoryService.GetFolder(folder); } /// diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index f87aab9..4f19573 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -273,7 +273,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.DeleteItem(item.Owner.ToString(), item, sessionID); } - public override InventoryItemBase QueryItem(InventoryItemBase item) + public override InventoryItemBase GetItem(InventoryItemBase item) { if (item == null) return null; @@ -282,7 +282,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_RemoteConnector.QueryItem(item.Owner.ToString(), item, sessionID); } - public override InventoryFolderBase QueryFolder(InventoryFolderBase folder) + public override InventoryFolderBase GetFolder(InventoryFolderBase folder) { if (folder == null) return null; diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 8f99395..9c71b41 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs @@ -966,7 +966,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions if (objectID == UUID.Zero) // User inventory { IInventoryService invService = m_scene.InventoryService; - InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(notecard)); + InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(notecard)); if (assetRequestItem == null) // Library item { assetRequestItem = scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard); @@ -1385,7 +1385,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions if (objectID == UUID.Zero) // User inventory { IInventoryService invService = m_scene.InventoryService; - InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(script)); + InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(script)); if (assetRequestItem == null) // Library item { assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(script); @@ -1479,7 +1479,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions if (objectID == UUID.Zero) // User inventory { IInventoryService invService = m_scene.InventoryService; - InventoryItemBase assetRequestItem = invService.QueryItem(new InventoryItemBase(notecard)); + InventoryItemBase assetRequestItem = invService.GetItem(new InventoryItemBase(notecard)); if (assetRequestItem == null) // Library item { assetRequestItem = m_scene.CommsManager.UserProfileCacheService.LibraryRoot.FindItem(notecard); diff --git a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs index 1b93f46..dd6928f 100644 --- a/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Hypergrid/HGScene.Inventory.cs @@ -119,7 +119,7 @@ namespace OpenSim.Region.Framework.Scenes.Hypergrid { InventoryItemBase item = new InventoryItemBase(itemID); item.Owner = remoteClient.AgentId; - item = InventoryService.QueryItem(item); + item = InventoryService.GetItem(item); //if (item == null) //{ // Fetch the item // item = new InventoryItemBase(); diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index cd91e8c..a941a74 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -140,7 +140,7 @@ namespace OpenSim.Region.Framework.Scenes /// public virtual UUID CapsUpdateInventoryItemAsset(IClientAPI remoteClient, UUID itemID, byte[] data) { - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); if (item != null) { @@ -315,7 +315,7 @@ namespace OpenSim.Region.Framework.Scenes public void UpdateInventoryItemAsset(IClientAPI remoteClient, UUID transactionID, UUID itemID, InventoryItemBase itemUpd) { - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); if (item != null) { @@ -408,7 +408,7 @@ namespace OpenSim.Region.Framework.Scenes { Console.WriteLine("Scene.Inventory.cs: GiveInventoryItem"); - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemId)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemId)); if ((item != null) && (item.Owner == senderId)) { @@ -505,7 +505,7 @@ namespace OpenSim.Region.Framework.Scenes UUID recipientId, UUID senderId, UUID folderId, UUID recipientParentFolderId) { //// Retrieve the folder from the sender - InventoryFolderBase folder = InventoryService.QueryFolder(new InventoryFolderBase(folderId)); + InventoryFolderBase folder = InventoryService.GetFolder(new InventoryFolderBase(folderId)); if (null == folder) { m_log.ErrorFormat( @@ -558,7 +558,7 @@ namespace OpenSim.Region.Framework.Scenes if (item == null) { - item = InventoryService.QueryItem(new InventoryItemBase(oldItemID)); + item = InventoryService.GetItem(new InventoryItemBase(oldItemID)); if (item == null) { @@ -636,7 +636,7 @@ namespace OpenSim.Region.Framework.Scenes m_log.DebugFormat( "[AGENT INVENTORY]: Moving item {0} to {1} for {2}", itemID, folderID, remoteClient.AgentId); - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); if (item != null) { @@ -1224,7 +1224,7 @@ namespace OpenSim.Region.Framework.Scenes UUID copyID = UUID.Random(); if (itemID != UUID.Zero) { - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); // Try library if (null == item) @@ -1287,7 +1287,7 @@ namespace OpenSim.Region.Framework.Scenes if (itemID != UUID.Zero) // transferred from an avatar inventory to the prim's inventory { - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); // Try library // XXX clumsy, possibly should be one call @@ -1673,7 +1673,7 @@ namespace OpenSim.Region.Framework.Scenes if (DeRezAction.SaveToExistingUserInventoryItem == action) { item = new InventoryItemBase(objectGroup.RootPart.FromUserInventoryItemID); - item = InventoryService.QueryItem(item); + item = InventoryService.GetItem(item); //item = userInfo.RootFolder.FindItem( // objectGroup.RootPart.FromUserInventoryItemID); @@ -1834,7 +1834,7 @@ namespace OpenSim.Region.Framework.Scenes string sceneObjectXml = SceneObjectSerializer.ToOriginalXmlFormat(objectGroup); - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); if (item != null) { @@ -1984,7 +1984,7 @@ namespace OpenSim.Region.Framework.Scenes BypassRayCast, bRayEndIsIntersection,true,scale, false); // Rez object - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); if (item != null) { diff --git a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs index e2debe5..bcc9bcb 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.PacketHandlers.cs @@ -382,7 +382,7 @@ namespace OpenSim.Region.Framework.Scenes return; } - InventoryItemBase item = InventoryService.QueryItem(new InventoryItemBase(itemID)); + InventoryItemBase item = InventoryService.GetItem(new InventoryItemBase(itemID)); if (item != null) { @@ -516,7 +516,7 @@ namespace OpenSim.Region.Framework.Scenes public void HandleMoveInventoryFolder(IClientAPI remoteClient, UUID folderID, UUID parentID) { InventoryFolderBase folder = new InventoryFolderBase(folderID); - folder = InventoryService.QueryFolder(folder); + folder = InventoryService.GetFolder(folder); if (folder != null) { folder.ParentID = parentID; diff --git a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs index af2753c..f28352c 100644 --- a/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs +++ b/OpenSim/Region/Framework/Scenes/SceneCommunicationService.cs @@ -1020,11 +1020,11 @@ namespace OpenSim.Region.Framework.Scenes public bool WaitForCallback(UUID id) { - int count = 20; + int count = 200; while (m_agentsInTransit.Contains(id) && count-- > 0) { //m_log.Debug(" >>> Waiting... " + count); - Thread.Sleep(1000); + Thread.Sleep(100); } if (count > 0) @@ -1141,16 +1141,16 @@ namespace OpenSim.Region.Framework.Scenes { pos = pos + (agent.Velocity); - CachedUserInfo userInfo = m_commsProvider.UserProfileCacheService.GetUserDetails(agent.UUID); - if (userInfo != null) - { - userInfo.DropInventory(); - } - else - { - m_log.WarnFormat("[SCENE COMM]: No cached user info found for {0} {1} on leaving region {2}", - agent.Name, agent.UUID, agent.Scene.RegionInfo.RegionName); - } + //CachedUserInfo userInfo = m_commsProvider.UserProfileCacheService.GetUserDetails(agent.UUID); + //if (userInfo != null) + //{ + // userInfo.DropInventory(); + //} + //else + //{ + // m_log.WarnFormat("[SCENE COMM]: No cached user info found for {0} {1} on leaving region {2}", + // agent.Name, agent.UUID, agent.Scene.RegionInfo.RegionName); + //} //bool crossingSuccessful = // CrossToNeighbouringRegion(neighbourHandle, agent.ControllingClient.AgentId, pos, diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index 8d104ac..63cf034 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs @@ -110,11 +110,11 @@ namespace OpenSim.Server.Handlers.Inventory m_httpServer.AddStreamHandler( new RestDeserialiseSecureHandler( - "POST", "/QueryItem/", m_InventoryService.QueryItem, CheckAuthSession)); + "POST", "/QueryItem/", m_InventoryService.GetItem, CheckAuthSession)); m_httpServer.AddStreamHandler( new RestDeserialiseSecureHandler( - "POST", "/QueryFolder/", m_InventoryService.QueryFolder, CheckAuthSession)); + "POST", "/QueryFolder/", m_InventoryService.GetFolder, CheckAuthSession)); m_httpServer.AddStreamHandler( new RestDeserialiseTrustedHandler( diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index 22289aa..41aacd0 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs @@ -156,12 +156,12 @@ namespace OpenSim.Services.Connectors return false; } - public InventoryItemBase QueryItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { return null; } - public InventoryFolderBase QueryFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index 8058aa7..6256c32 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -149,9 +149,9 @@ namespace OpenSim.Services.Interfaces /// true if the item was successfully deleted bool DeleteItem(InventoryItemBase item); - InventoryItemBase QueryItem(InventoryItemBase item); + InventoryItemBase GetItem(InventoryItemBase item); - InventoryFolderBase QueryFolder(InventoryFolderBase folder); + InventoryFolderBase GetFolder(InventoryFolderBase folder); /// /// Does the given user have an inventory structure? diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index a9ecda4..3d706dc 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -398,7 +398,7 @@ namespace OpenSim.Services.InventoryService return true; } - public virtual InventoryItemBase QueryItem(InventoryItemBase item) + public virtual InventoryItemBase GetItem(InventoryItemBase item) { InventoryItemBase result = m_Database.queryInventoryItem(item.ID); if (result != null) @@ -407,7 +407,7 @@ namespace OpenSim.Services.InventoryService return null; } - public virtual InventoryFolderBase QueryFolder(InventoryFolderBase item) + public virtual InventoryFolderBase GetFolder(InventoryFolderBase item) { InventoryFolderBase result = m_Database.queryInventoryFolder(item.ID); if (result != null) diff --git a/OpenSim/Tests/Common/Mock/TestInventoryService.cs b/OpenSim/Tests/Common/Mock/TestInventoryService.cs index 6635700..6576533 100644 --- a/OpenSim/Tests/Common/Mock/TestInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/TestInventoryService.cs @@ -148,12 +148,12 @@ namespace OpenSim.Tests.Common.Mock return false; } - public InventoryItemBase QueryItem(InventoryItemBase item) + public InventoryItemBase GetItem(InventoryItemBase item) { return null; } - public InventoryFolderBase QueryFolder(InventoryFolderBase folder) + public InventoryFolderBase GetFolder(InventoryFolderBase folder) { return null; } -- cgit v1.1 From 034c9cf606373bfa9d3f8040cd787f789e0efbf2 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Thu, 13 Aug 2009 17:34:15 -0700 Subject: Added GetAssetPermissions. Few last bugs nixed. This is ready for testing. --- .../Communications/Tests/LoginServiceTests.cs | 5 +++ .../Region/ClientStack/LindenUDP/LLClientView.cs | 15 ++++--- .../Agent/TextureDownload/TextureDownloadModule.cs | 8 +++- .../Inventory/BaseInventoryConnector.cs | 7 +++- .../Inventory/HGInventoryBroker.cs | 17 ++++++-- .../Inventory/LocalInventoryServiceConnector.cs | 20 +++++---- .../Inventory/RemoteInventoryServiceConnector.cs | 10 +++-- .../Inventory/InventoryServerInConnector.cs | 12 ++++++ .../Inventory/HGInventoryServiceConnector.cs | 14 ++++++- .../Inventory/ISessionAuthInventoryService.cs | 2 + .../Inventory/InventoryServiceConnector.cs | 49 +++++++++++++++------- .../QuickAndDirtyInventoryServiceConnector.cs | 5 +++ OpenSim/Services/Interfaces/IInventoryService.cs | 20 +++++++++ .../Services/InventoryService/InventoryService.cs | 23 ++++++++++ OpenSim/Tests/Common/Mock/TestInventoryService.cs | 5 +++ 15 files changed, 168 insertions(+), 44 deletions(-) diff --git a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs index 3161364..22dcef9 100644 --- a/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs +++ b/OpenSim/Framework/Communications/Tests/LoginServiceTests.cs @@ -575,5 +575,10 @@ namespace OpenSim.Framework.Communications.Tests root.ParentID = UUID.Zero; return root; } + + public int GetAssetPermissions(UUID userID, UUID assetID) + { + return 1; + } } } diff --git a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs index a3e275d..6dda5aa 100644 --- a/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs +++ b/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs @@ -2156,16 +2156,13 @@ namespace OpenSim.Region.ClientStack.LindenUDP protected void SendBulkUpdateInventoryFolder(InventoryFolderBase folderBase) { - // XXX: Nasty temporary move that will be resolved shortly - InventoryFolderImpl folder = (InventoryFolderImpl)folderBase; - // We will use the same transaction id for all the separate packets to be sent out in this update. UUID transactionId = UUID.Random(); List folderDataBlocks = new List(); - SendBulkUpdateInventoryFolderRecursive(folder, ref folderDataBlocks, transactionId); + SendBulkUpdateInventoryFolderRecursive(folderBase, ref folderDataBlocks, transactionId); if (folderDataBlocks.Count > 0) { @@ -2191,17 +2188,19 @@ namespace OpenSim.Region.ClientStack.LindenUDP /// /// private void SendBulkUpdateInventoryFolderRecursive( - InventoryFolderImpl folder, ref List folderDataBlocks, + InventoryFolderBase folder, ref List folderDataBlocks, UUID transactionId) { folderDataBlocks.Add(GenerateBulkUpdateFolderDataBlock(folder)); const int MAX_ITEMS_PER_PACKET = 5; + IInventoryService invService = m_scene.RequestModuleInterface(); // If there are any items then we have to start sending them off in this packet - the next folder will have // to be in its own bulk update packet. Also, we can only fit 5 items in a packet (at least this was the limit // being used on the Linden grid at 20081203). - List items = folder.RequestListOfItems(); + InventoryCollection contents = invService.GetFolderContent(AgentId, folder.ID); // folder.RequestListOfItems(); + List items = contents.Items; while (items.Count > 0) { BulkUpdateInventoryPacket bulkUpdate @@ -2233,8 +2232,8 @@ namespace OpenSim.Region.ClientStack.LindenUDP folderDataBlocks.Add(GenerateBulkUpdateFolderDataBlock(folder)); } - List subFolders = folder.RequestListOfFolderImpls(); - foreach (InventoryFolderImpl subFolder in subFolders) + List subFolders = contents.Folders; + foreach (InventoryFolderBase subFolder in subFolders) { SendBulkUpdateInventoryFolderRecursive(subFolder, ref folderDataBlocks, transactionId); } diff --git a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs index 956dd10..71ff28c 100644 --- a/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs +++ b/OpenSim/Region/CoreModules/Agent/TextureDownload/TextureDownloadModule.cs @@ -222,8 +222,12 @@ namespace OpenSim.Region.CoreModules.Agent.TextureDownload if (invService.GetRootFolder(client.AgentId) == null) // Deny no inventory return; - if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned - return; + // Diva 2009-08-13: this test doesn't make any sense to many devs + //if (profile.UserProfile.GodLevel < 200 && profile.RootFolder.FindAsset(e.RequestedAssetID) == null) // Deny if not owned + //{ + // m_log.WarnFormat("[TEXTURE]: user {0} doesn't have permissions to texture {1}"); + // return; + //} m_log.Debug("Texture preview"); } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs index 0526bc4..ef5ffe1 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/BaseInventoryConnector.cs @@ -82,7 +82,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory /// /// /// null if no root folder was found - public abstract InventoryFolderBase GetRootFolder(UUID userID); + public InventoryFolderBase GetRootFolder(UUID userID) + { + // Root folder is here as system type Folder. + return m_cache.GetFolderForType(userID, AssetType.Folder); + } public abstract Dictionary GetSystemFolders(UUID userID); @@ -202,5 +206,6 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory /// public abstract List GetActiveGestures(UUID userId); + public abstract int GetAssetPermissions(UUID userID, UUID assetID); } } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index db4e7f4..fd12a57 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -263,6 +263,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory folders[(AssetType)folder.Type] = folder; } m_log.DebugFormat("[HG INVENTORY CONNECTOR]: System folders count for {0}: {1}", userID, folders.Count); + // Put the root folder there, as type Folder + folders[AssetType.Folder] = root; return folders; } m_log.DebugFormat("[HG INVENTORY CONNECTOR]: Root folder content not found for {0}", userID); @@ -422,14 +424,21 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return false; } - public override InventoryFolderBase GetRootFolder(UUID userID) + public override List GetActiveGestures(UUID userId) { - return null; + return new List(); } - public override List GetActiveGestures(UUID userId) + public override int GetAssetPermissions(UUID userID, UUID assetID) { - return new List(); + if (IsLocalGridUser(userID)) + return m_GridService.GetAssetPermissions(userID, assetID); + else + { + UUID sessionID = GetSessionID(userID); + string uri = GetUserInventoryURI(userID) + "/" + userID.ToString(); + return m_HGService.GetAssetPermissions(uri, assetID, sessionID); + } } #endregion diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs index ccf06d1..2fbc5fe 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/LocalInventoryServiceConnector.cs @@ -201,8 +201,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory foreach (InventoryFolderBase folder in content.Folders) { if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) + { + m_log.InfoFormat("[INVENTORY CONNECTOR]: folder type {0} ", folder.Type); folders[(AssetType)folder.Type] = folder; + } } + // Put the root folder there, as type Folder + folders[AssetType.Folder] = root; + m_log.InfoFormat("[INVENTORY CONNECTOR]: root folder is type {0} ", root.Type); + return folders; } } @@ -312,19 +319,14 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return m_InventoryService.HasInventoryForUser(userID); } - /// - /// Retrieve the root inventory folder for the given user. - /// - /// - /// null if no root folder was found - public override InventoryFolderBase GetRootFolder(UUID userID) + public override List GetActiveGestures(UUID userId) { - return m_InventoryService.GetRootFolder(userID); + return m_InventoryService.GetActiveGestures(userId); } - public override List GetActiveGestures(UUID userId) + public override int GetAssetPermissions(UUID userID, UUID assetID) { - return m_InventoryService.GetActiveGestures(userId); + return m_InventoryService.GetAssetPermissions(userID, assetID); } #endregion IInventoryService } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 4f19573..e4bb865 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -296,16 +296,18 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory return false; } - public override InventoryFolderBase GetRootFolder(UUID userID) + public override List GetActiveGestures(UUID userId) { - return null; + return new List(); } - public override List GetActiveGestures(UUID userId) + public override int GetAssetPermissions(UUID userID, UUID assetID) { - return new List(); + UUID sessionID = GetSessionID(userID); + return m_RemoteConnector.GetAssetPermissions(userID.ToString(), assetID, sessionID); } + #endregion private UUID GetSessionID(UUID userID) diff --git a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs index 63cf034..30b3cae 100644 --- a/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs +++ b/OpenSim/Server/Handlers/Inventory/InventoryServerInConnector.cs @@ -153,6 +153,11 @@ namespace OpenSim.Server.Handlers.Inventory m_httpServer.AddStreamHandler( new RestDeserialiseTrustedHandler> ("POST", "/RootFolders/", GetInventorySkeleton, CheckTrustSource)); + + m_httpServer.AddStreamHandler( + new RestDeserialiseTrustedHandler + ("POST", "/AssetPermissions/", GetAssetPermissions, CheckTrustSource)); + } #region Wrappers for converting the Guid parameter @@ -185,6 +190,8 @@ namespace OpenSim.Server.Handlers.Inventory if ((folder.Type != (short)AssetType.Folder) && (folder.Type != (short)AssetType.Unknown)) folders[(AssetType)folder.Type] = folder; } + // Put the root folder there, as type Folder + folders[AssetType.Folder] = root; return folders; } } @@ -235,6 +242,11 @@ namespace OpenSim.Server.Handlers.Inventory return m_InventoryService.GetInventorySkeleton(userID); } + public int GetAssetPermissions(InventoryItemBase item) + { + return m_InventoryService.GetAssetPermissions(item.Owner, item.AssetID); + } + #endregion /// diff --git a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs index f6d1500..94b4ad9 100644 --- a/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/HGInventoryServiceConnector.cs @@ -149,7 +149,7 @@ namespace OpenSim.Services.Connectors.Inventory /// public InventoryCollection GetFolderContent(string id, UUID folderID, UUID sessionID) { - m_log.Debug("[HGInventory]: GetSystemFolders " + id); + m_log.Debug("[HGInventory]: GetFolderContent " + id); string url = string.Empty; string userID = string.Empty; @@ -279,5 +279,17 @@ namespace OpenSim.Services.Connectors.Inventory return null; } + public int GetAssetPermissions(string id, UUID assetID, UUID sessionID) + { + string url = string.Empty; + string userID = string.Empty; + + if (StringToUrlAndUserID(id, out url, out userID)) + { + ISessionAuthInventoryService connector = GetConnector(url); + return connector.GetAssetPermissions(userID, assetID, sessionID); + } + return 0; + } } } diff --git a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs index 973cb0a..f50bcf5 100644 --- a/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs +++ b/OpenSim/Services/Connectors/Inventory/ISessionAuthInventoryService.cs @@ -120,5 +120,7 @@ namespace OpenSim.Services.Connectors InventoryFolderBase QueryFolder(string userID, InventoryFolderBase item, UUID session_id); + int GetAssetPermissions(string userID, UUID assetID, UUID session_id); + } } diff --git a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs index e41b427..4907015 100644 --- a/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/InventoryServiceConnector.cs @@ -163,21 +163,21 @@ namespace OpenSim.Services.Connectors /// public Dictionary GetSystemFolders(string userID, UUID sessionID) { - // !!! Not just yet. - //try - //{ - // List folders = SynchronousRestSessionObjectPoster>.BeginPostObject( - // "POST", m_ServerURI + "/SystemFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); - // Dictionary dFolders = new Dictionary(); - // foreach (InventoryFolderBase f in folders) - // dFolders[(AssetType)f.Type] = f; - // return dFolders; - //} - //catch (Exception e) - //{ - // m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}", - // e.Source, e.Message); - //} + try + { + List folders = SynchronousRestSessionObjectPoster>.BeginPostObject( + "POST", m_ServerURI + "/SystemFolders/", new Guid(userID), sessionID.ToString(), userID.ToString()); + + Dictionary dFolders = new Dictionary(); + foreach (InventoryFolderBase f in folders) + dFolders[(AssetType)f.Type] = f; + return dFolders; + } + catch (Exception e) + { + m_log.ErrorFormat("[INVENTORY CONNECTOR]: GetSystemFolders operation failed, {0} {1}", + e.Source, e.Message); + } return new Dictionary(); } @@ -348,6 +348,25 @@ namespace OpenSim.Services.Connectors return null; } + public int GetAssetPermissions(string userID, UUID assetID, UUID sessionID) + { + try + { + InventoryItemBase item = new InventoryItemBase(); + item.Owner = new UUID(userID); + item.AssetID = assetID; + return SynchronousRestSessionObjectPoster.BeginPostObject( + "POST", m_ServerURI + "/AssetPermissions/", item, sessionID.ToString(), userID); + } + catch (Exception e) + { + m_log.ErrorFormat("[INVENTORY CONNECTOR]: AssetPermissions operation failed, {0} {1}", + e.Source, e.Message); + } + + return 0; + } + #endregion /// diff --git a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs index 41aacd0..5cbd307 100644 --- a/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs +++ b/OpenSim/Services/Connectors/Inventory/QuickAndDirtyInventoryServiceConnector.cs @@ -176,5 +176,10 @@ namespace OpenSim.Services.Connectors return null; } + public int GetAssetPermissions(UUID userID, UUID assetID) + { + return 0; + } + } } diff --git a/OpenSim/Services/Interfaces/IInventoryService.cs b/OpenSim/Services/Interfaces/IInventoryService.cs index 6256c32..a89a238 100644 --- a/OpenSim/Services/Interfaces/IInventoryService.cs +++ b/OpenSim/Services/Interfaces/IInventoryService.cs @@ -149,8 +149,18 @@ namespace OpenSim.Services.Interfaces /// true if the item was successfully deleted bool DeleteItem(InventoryItemBase item); + /// + /// Get an item, given by its UUID + /// + /// + /// InventoryItemBase GetItem(InventoryItemBase item); + /// + /// Get a folder, given by its UUID + /// + /// + /// InventoryFolderBase GetFolder(InventoryFolderBase folder); /// @@ -166,5 +176,15 @@ namespace OpenSim.Services.Interfaces /// /// List GetActiveGestures(UUID userId); + + /// + /// Get the union of permissions of all inventory items + /// that hold the given assetID. + /// + /// + /// + /// The permissions or 0 if no such asset is found in + /// the user's inventory + int GetAssetPermissions(UUID userID, UUID assetID); } } diff --git a/OpenSim/Services/InventoryService/InventoryService.cs b/OpenSim/Services/InventoryService/InventoryService.cs index 3d706dc..65c2d96 100644 --- a/OpenSim/Services/InventoryService/InventoryService.cs +++ b/OpenSim/Services/InventoryService/InventoryService.cs @@ -465,6 +465,29 @@ namespace OpenSim.Services.InventoryService return null; } + public int GetAssetPermissions(UUID userID, UUID assetID) + { + InventoryFolderBase parent = GetRootFolder(userID); + return FindAssetPerms(parent, assetID); + } + + private int FindAssetPerms(InventoryFolderBase folder, UUID assetID) + { + InventoryCollection contents = GetFolderContent(folder.Owner, folder.ID); + + int perms = 0; + foreach (InventoryItemBase item in contents.Items) + { + if (item.AssetID == assetID) + perms = (int)item.CurrentPermissions | perms; + } + + foreach (InventoryFolderBase subfolder in contents.Folders) + perms = perms | FindAssetPerms(subfolder, assetID); + + return perms; + } + /// /// Used to create a new user inventory. /// diff --git a/OpenSim/Tests/Common/Mock/TestInventoryService.cs b/OpenSim/Tests/Common/Mock/TestInventoryService.cs index 6576533..ba9cbe9 100644 --- a/OpenSim/Tests/Common/Mock/TestInventoryService.cs +++ b/OpenSim/Tests/Common/Mock/TestInventoryService.cs @@ -171,5 +171,10 @@ namespace OpenSim.Tests.Common.Mock root.ParentID = UUID.Zero; return root; } + + public int GetAssetPermissions(UUID userID, UUID assetID) + { + return 1; + } } } -- cgit v1.1 From 332d1b5f2f7684de7e359be17f929f85fe4dbe2c Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 14 Aug 2009 08:43:46 -0700 Subject: Additional debug messages, and bug fix in RemoteInventoryServiceConnector.cs, where the scene reference wasn't being set. --- .../ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | 11 ++++++++++- .../Inventory/RemoteInventoryServiceConnector.cs | 3 ++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index fd12a57..f0493f7 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -455,15 +455,24 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private bool IsLocalGridUser(UUID userID) { if (m_UserProfileService == null) + { + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, no profile service. Returning false."); return false; + } CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); if (uinfo == null) + { + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, no profile for user {0}. Returning false.", userID); return true; + } string userInventoryServerURI = HGNetworkServersInfo.ServerURI(uinfo.UserProfile.UserInventoryURI); + string uri = m_LocalGridInventoryURI.TrimEnd('/'); + + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, comparing {0} to {1}.", userInventoryServerURI, uri); - if ((userInventoryServerURI == m_LocalGridInventoryURI) || (userInventoryServerURI == "")) + if ((userInventoryServerURI == uri) || (userInventoryServerURI == "")) { return true; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index e4bb865..8722e68 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -104,12 +104,13 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public void AddRegion(Scene scene) { + m_Scene = scene; + if (!m_Enabled) return; if (!m_Initialized) { - m_Scene = scene; // ugh! scene.CommsManager.UserProfileCacheService.SetInventoryService(this); scene.CommsManager.UserService.SetInventoryService(this); -- cgit v1.1 From 70d7c97e94a0bab80080009e9906977e9475d35f Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 14 Aug 2009 09:57:18 -0700 Subject: Doing session lookup in the right way. --- .../ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | 9 +++++---- .../Inventory/RemoteInventoryServiceConnector.cs | 10 ++++++---- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index f0493f7..cb9a462 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -393,7 +393,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory { if (item == null) return null; - + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetItem {0} for user {1}", item.ID, item.Owner); if (IsLocalGridUser(item.Owner)) return m_GridService.GetItem(item); else @@ -445,10 +445,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private UUID GetSessionID(UUID userID) { - ScenePresence sp = m_Scene.GetScenePresence(userID); - if (sp != null) - return sp.ControllingClient.SessionId; + CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); + if (uinfo != null) + return uinfo.SessionID; + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: user profile for {0} not found", userID); return UUID.Zero; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 8722e68..5992145 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -32,6 +32,7 @@ using System.Reflection; using Nini.Config; using OpenSim.Framework; using OpenSim.Framework.Statistics; +using OpenSim.Framework.Communications.Cache; using OpenSim.Services.Connectors; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; @@ -313,11 +314,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private UUID GetSessionID(UUID userID) { - ScenePresence sp = m_Scene.GetScenePresence(userID); - if (sp != null) - return sp.ControllingClient.SessionId; - + CachedUserInfo uinfo = m_Scene.CommsManager.UserProfileCacheService.GetUserDetails(userID); + if (uinfo != null) + return uinfo.SessionID; + m_log.DebugFormat("[INVENTORY CONNECTOR]: user profile for {0} not found", userID); return UUID.Zero; + } } -- cgit v1.1 From c56e51a6e36a7a9977b9b162349256b338f4e3f3 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 14 Aug 2009 10:29:29 -0700 Subject: More debug messages. --- .../Inventory/RemoteInventoryServiceConnector.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 5992145..20cddcd 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -105,6 +105,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public void AddRegion(Scene scene) { + m_log.Debug("[XXXX] Adding scene " + scene.RegionInfo.RegionName); m_Scene = scene; if (!m_Enabled) @@ -314,6 +315,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private UUID GetSessionID(UUID userID) { + if (m_Scene == null) + m_log.Debug("[INVENTORY CONNECTOR]: OOPS! scene is null"); + + if (m_Scene.CommsManager.UserProfileCacheService == null) + m_log.Debug("[INVENTORY CONNECTOR]: OOPS! UserProfileCacheService is null"); + CachedUserInfo uinfo = m_Scene.CommsManager.UserProfileCacheService.GetUserDetails(userID); if (uinfo != null) return uinfo.SessionID; -- cgit v1.1 From bb513c1d885284d7cc1d97ea2cc4fb834b8bada1 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 14 Aug 2009 11:32:25 -0700 Subject: Changed the way to get to the profile service. Changed GetSystemsFolder in HGBroker. --- .../ServiceConnectorsOut/Inventory/HGInventoryBroker.cs | 16 ++++++++++++++-- .../Inventory/RemoteInventoryServiceConnector.cs | 8 +++++--- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs index cb9a462..59b2019 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/HGInventoryBroker.cs @@ -238,7 +238,19 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public override Dictionary GetSystemFolders(UUID userID) { if (IsLocalGridUser(userID)) - return GetSystemFoldersLocal(userID); + { + // This is not pretty, but it will have to do for now + if (m_GridService is BaseInventoryConnector) + { + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetSystemsFolders redirected to RemoteInventoryServiceConnector module"); + return ((BaseInventoryConnector)m_GridService).GetSystemFolders(userID); + } + else + { + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: GetSystemsFolders redirected to GetSystemFoldersLocal"); + return GetSystemFoldersLocal(userID); + } + } else { UUID sessionID = GetSessionID(userID); @@ -464,7 +476,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); if (uinfo == null) { - m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, no profile for user {0}. Returning false.", userID); + m_log.DebugFormat("[HG INVENTORY CONNECTOR]: IsLocalGridUser, no profile for user {0}. Returning true.", userID); return true; } diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 20cddcd..62df3bd 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -49,6 +49,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private bool m_Enabled = false; private bool m_Initialized = false; private Scene m_Scene; + private UserProfileCacheService m_UserProfileService; private InventoryServicesConnector m_RemoteConnector; public Type ReplaceableInterface @@ -105,8 +106,8 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public void AddRegion(Scene scene) { - m_log.Debug("[XXXX] Adding scene " + scene.RegionInfo.RegionName); m_Scene = scene; + m_log.Debug("[XXXX] Adding scene " + m_Scene.RegionInfo.RegionName); if (!m_Enabled) return; @@ -133,6 +134,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public void RegionLoaded(Scene scene) { + m_UserProfileService = m_Scene.CommsManager.UserProfileCacheService; if (!m_Enabled) return; @@ -318,10 +320,10 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory if (m_Scene == null) m_log.Debug("[INVENTORY CONNECTOR]: OOPS! scene is null"); - if (m_Scene.CommsManager.UserProfileCacheService == null) + if (m_UserProfileService == null) m_log.Debug("[INVENTORY CONNECTOR]: OOPS! UserProfileCacheService is null"); - CachedUserInfo uinfo = m_Scene.CommsManager.UserProfileCacheService.GetUserDetails(userID); + CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); if (uinfo != null) return uinfo.SessionID; m_log.DebugFormat("[INVENTORY CONNECTOR]: user profile for {0} not found", userID); -- cgit v1.1 From 46116864b9f8cc63ec97b89f11bb5372f08dbc01 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 14 Aug 2009 11:50:42 -0700 Subject: Returning UUID.Zero is scene and user profile service are null in GetSession. This doesn't fix the underlying problem of these things being null -- they shouldn't be. --- .../Inventory/RemoteInventoryServiceConnector.cs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs index 62df3bd..bef716b 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Inventory/RemoteInventoryServiceConnector.cs @@ -135,6 +135,9 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory public void RegionLoaded(Scene scene) { m_UserProfileService = m_Scene.CommsManager.UserProfileCacheService; + if (m_UserProfileService != null) + m_log.Debug("[XXXX] Set m_UserProfileService in " + m_Scene.RegionInfo.RegionName); + if (!m_Enabled) return; @@ -318,10 +321,15 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Inventory private UUID GetSessionID(UUID userID) { if (m_Scene == null) + { m_log.Debug("[INVENTORY CONNECTOR]: OOPS! scene is null"); + } if (m_UserProfileService == null) + { m_log.Debug("[INVENTORY CONNECTOR]: OOPS! UserProfileCacheService is null"); + return UUID.Zero; + } CachedUserInfo uinfo = m_UserProfileService.GetUserDetails(userID); if (uinfo != null) -- cgit v1.1 From 1bbf06405c109a4299a9494555f8223dd954610b Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Sat, 15 Aug 2009 09:36:45 -0700 Subject: Changed FromAssetID to FromItemID --- OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 8 ++++---- OpenSim/Region/Framework/Scenes/Scene.cs | 2 +- OpenSim/Region/Framework/Scenes/SceneGraph.cs | 14 +++++++------- OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs | 18 +++++++++--------- OpenSim/Region/Framework/Scenes/SceneObjectPart.cs | 6 +++--- .../ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | 2 +- 6 files changed, 25 insertions(+), 25 deletions(-) diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index a941a74..cea9044 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs @@ -1906,8 +1906,8 @@ namespace OpenSim.Region.Framework.Scenes } item.CreationDate = Util.UnixTimeSinceEpoch(); - // sets assetID so client can show asset as 'attached' in inventory - grp.SetFromAssetID(item.ID); + // sets itemID so client can show item as 'attached' in inventory + grp.SetFromItemID(item.ID); if (InventoryService.AddItem(item)) remoteClient.SendInventoryItemCreateUpdate(item, 0); @@ -2044,7 +2044,7 @@ namespace OpenSim.Region.Framework.Scenes } else { - group.SetFromAssetID(itemID); + group.SetFromItemID(itemID); } SceneObjectPart rootPart = null; @@ -2373,7 +2373,7 @@ namespace OpenSim.Region.Framework.Scenes if (part == null || part.ParentGroup == null) return; - UUID inventoryID = part.ParentGroup.GetFromAssetID(); + UUID inventoryID = part.ParentGroup.GetFromItemID(); ScenePresence presence; if (TryGetAvatar(remoteClient.AgentId, out presence)) diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 107a4a4..b9edd6e 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs @@ -1962,7 +1962,7 @@ namespace OpenSim.Region.Framework.Scenes m_log.DebugFormat("[ATTACHMENT]: Received " + "attachment {0}, inworld asset id {1}", //grp.RootPart.LastOwnerID.ToString(), - grp.GetFromAssetID(), + grp.GetFromItemID(), grp.UUID.ToString()); //grp.SetFromAssetID(grp.RootPart.LastOwnerID); diff --git a/OpenSim/Region/Framework/Scenes/SceneGraph.cs b/OpenSim/Region/Framework/Scenes/SceneGraph.cs index 9599379..7b6b666 100644 --- a/OpenSim/Region/Framework/Scenes/SceneGraph.cs +++ b/OpenSim/Region/Framework/Scenes/SceneGraph.cs @@ -442,7 +442,7 @@ namespace OpenSim.Region.Framework.Scenes if (group != null) { //group.DetachToGround(); - m_parentScene.DetachSingleAttachmentToInv(group.GetFromAssetID(), remoteClient); + m_parentScene.DetachSingleAttachmentToInv(group.GetFromItemID(), remoteClient); } } @@ -489,7 +489,7 @@ namespace OpenSim.Region.Framework.Scenes // Calls attach with a Zero position // AttachObject(remoteClient, objectLocalID, AttachmentPt, rot, Vector3.Zero, false); - m_parentScene.SendAttachEvent(objectLocalID, part.ParentGroup.GetFromAssetID(), remoteClient.AgentId); + m_parentScene.SendAttachEvent(objectLocalID, part.ParentGroup.GetFromItemID(), remoteClient.AgentId); } public SceneObjectGroup RezSingleAttachment( @@ -536,14 +536,14 @@ namespace OpenSim.Region.Framework.Scenes if (entity is SceneObjectGroup) { group = (SceneObjectGroup)entity; - if (group.GetFromAssetID() == itemID) + if (group.GetFromItemID() == itemID) { m_parentScene.SendAttachEvent(group.LocalId, itemID, UUID.Zero); group.DetachToInventoryPrep(); m_log.Debug("[DETACH]: Saving attachpoint: " + ((uint)group.GetAttachmentPoint()).ToString()); m_parentScene.UpdateKnownItem(remoteClient, group, - group.GetFromAssetID(), group.OwnerID); + group.GetFromItemID(), group.OwnerID); m_parentScene.DeleteSceneObject(group, false); return; } @@ -588,13 +588,13 @@ namespace OpenSim.Region.Framework.Scenes // Saves and gets assetID UUID itemId; - if (group.GetFromAssetID() == UUID.Zero) + if (group.GetFromItemID() == UUID.Zero) { m_parentScene.attachObjectAssetStore(remoteClient, group, remoteClient.AgentId, out itemId); } else { - itemId = group.GetFromAssetID(); + itemId = group.GetFromItemID(); } m_parentScene.AttachObject(remoteClient, AttachmentPt, itemId, group); @@ -1307,7 +1307,7 @@ namespace OpenSim.Region.Framework.Scenes group.UpdateGroupPosition(pos); group.RootPart.IsAttachment = false; group.AbsolutePosition = group.RootPart.AttachedPos; - m_parentScene.UpdateKnownItem(remoteClient, group, group.GetFromAssetID(), group.OwnerID); + m_parentScene.UpdateKnownItem(remoteClient, group, group.GetFromItemID(), group.OwnerID); group.SetAttachmentPoint(attachmentPoint); } diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs index c86e4a1..00c59ca 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.cs @@ -447,22 +447,22 @@ namespace OpenSim.Region.Framework.Scenes } } - public void SetFromAssetID(UUID AssetId) + public void SetFromItemID(UUID AssetId) { lock (m_parts) { foreach (SceneObjectPart part in m_parts.Values) { - part.FromAssetID = AssetId; + part.FromItemID = AssetId; } } } - public UUID GetFromAssetID() + public UUID GetFromItemID() { if (m_rootPart != null) { - return m_rootPart.FromAssetID; + return m_rootPart.FromItemID; } return UUID.Zero; } @@ -3374,19 +3374,19 @@ namespace OpenSim.Region.Framework.Scenes public virtual string ExtraToXmlString() { - return "" + GetFromAssetID().ToString() + ""; + return "" + GetFromItemID().ToString() + ""; } public virtual void ExtraFromXmlString(string xmlstr) { - string id = xmlstr.Substring(xmlstr.IndexOf("")); - id = xmlstr.Replace("", ""); - id = id.Replace("", ""); + string id = xmlstr.Substring(xmlstr.IndexOf("")); + id = xmlstr.Replace("", ""); + id = id.Replace("", ""); UUID uuid = UUID.Zero; UUID.TryParse(id, out uuid); - SetFromAssetID(uuid); + SetFromItemID(uuid); } #endregion diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs index 3646811..c95667a 100644 --- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs @@ -139,7 +139,7 @@ namespace OpenSim.Region.Framework.Scenes public uint TimeStampTerse = 0; [XmlIgnore] - public UUID FromAssetID = UUID.Zero; + public UUID FromItemID = UUID.Zero; /// /// The UUID of the user inventory item from which this object was rezzed if this is a root part. @@ -2389,7 +2389,7 @@ if (m_shape != null) { remoteClient.SendPrimitiveToClient(m_regionHandle, (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, m_shape, lPos, Velocity, Acceleration, RotationOffset, RotationalVelocity, clientFlags, m_uuid, _ownerID, m_text, color, _parentID, m_particleSystem, m_clickAction, (byte)m_material, m_TextureAnimation, IsAttachment, - AttachmentPoint,FromAssetID, Sound, SoundGain, SoundFlags, SoundRadius); + AttachmentPoint,FromItemID, Sound, SoundGain, SoundFlags, SoundRadius); } /// @@ -3767,7 +3767,7 @@ if (m_shape != null) { (ushort)(m_parentGroup.GetTimeDilation() * (float)ushort.MaxValue), LocalId, lPos, RotationOffset, Velocity, - RotationalVelocity, state, FromAssetID, + RotationalVelocity, state, FromItemID, OwnerID, (int)AttachmentPoint); } diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 691732a..2dbbf70 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs @@ -2801,7 +2801,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api if ((item.PermsMask & ScriptBaseClass.PERMISSION_ATTACH) != 0) { SceneObjectGroup grp = m_host.ParentGroup; - UUID itemID = grp.GetFromAssetID(); + UUID itemID = grp.GetFromItemID(); ScenePresence presence = World.GetScenePresence(m_host.OwnerID); -- cgit v1.1