From 531f64a53bbd084dd8d0b33ae6c49821c74d718a Mon Sep 17 00:00:00 2001 From: MW Date: Thu, 16 Aug 2007 16:31:32 +0000 Subject: Taking Prims (SceneObjectGroups) in and out of inventory should now work and if left in inventory will still be there after restarts. (as with the rest of inventory it will only fully work in standalone mode with account authentication turned on). --- .../Framework/Communications/Cache/AssetCache.cs | 69 ++++++++++++++-------- .../Communications/Cache/CachedUserInfo.cs | 16 ++++- .../Communications/Cache/InventoryFolder.cs | 20 +++++++ .../Framework/Communications/IInventoryServices.cs | 1 + 4 files changed, 79 insertions(+), 27 deletions(-) (limited to 'OpenSim/Framework/Communications') diff --git a/OpenSim/Framework/Communications/Cache/AssetCache.cs b/OpenSim/Framework/Communications/Cache/AssetCache.cs index 3866e21..c08bef2 100644 --- a/OpenSim/Framework/Communications/Cache/AssetCache.cs +++ b/OpenSim/Framework/Communications/Cache/AssetCache.cs @@ -137,6 +137,16 @@ namespace OpenSim.Framework.Communications.Caches return asset; } + public AssetBase GetAsset(LLUUID assetID, bool isTexture) + { + AssetBase asset = GetAsset(assetID); + if (asset == null) + { + this._assetServer.RequestAsset(assetID, isTexture); + } + return asset; + } + public void AddAsset(AssetBase asset) { // Console.WriteLine("adding asset " + asset.FullID.ToStringHyphenated()); @@ -241,44 +251,51 @@ namespace OpenSim.Framework.Communications.Caches if (IsTexture) { // Console.WriteLine("asset recieved from asset server"); + TextureImage image = new TextureImage(asset); - this.Textures.Add(image.FullID, image); - if (this.RequestedTextures.ContainsKey(image.FullID)) + if (!this.Textures.ContainsKey(image.FullID)) { - AssetRequest req = this.RequestedTextures[image.FullID]; - req.ImageInfo = image; - if (image.Data.LongLength > 600) - { - //over 600 bytes so split up file - req.NumPackets = 1 + (int)(image.Data.Length - 600 ) / 1000; - } - else + this.Textures.Add(image.FullID, image); + if (this.RequestedTextures.ContainsKey(image.FullID)) { - req.NumPackets = 1; + AssetRequest req = this.RequestedTextures[image.FullID]; + req.ImageInfo = image; + if (image.Data.LongLength > 600) + { + //over 600 bytes so split up file + req.NumPackets = 1 + (int)(image.Data.Length - 600) / 1000; + } + else + { + req.NumPackets = 1; + } + this.RequestedTextures.Remove(image.FullID); + this.TextureRequests.Add(req); } - this.RequestedTextures.Remove(image.FullID); - this.TextureRequests.Add(req); } } else { AssetInfo assetInf = new AssetInfo(asset); - this.Assets.Add(assetInf.FullID, assetInf); - if (this.RequestedAssets.ContainsKey(assetInf.FullID)) + if (!this.Assets.ContainsKey(assetInf.FullID)) { - AssetRequest req = this.RequestedAssets[assetInf.FullID]; - req.AssetInf = assetInf; - if (assetInf.Data.LongLength > 600) - { - //over 600 bytes so split up file - req.NumPackets = 1 + (int)(assetInf.Data.Length - 600 + 999) / 1000; - } - else + this.Assets.Add(assetInf.FullID, assetInf); + if (this.RequestedAssets.ContainsKey(assetInf.FullID)) { - req.NumPackets = 1; + AssetRequest req = this.RequestedAssets[assetInf.FullID]; + req.AssetInf = assetInf; + if (assetInf.Data.LongLength > 600) + { + //over 600 bytes so split up file + req.NumPackets = 1 + (int)(assetInf.Data.Length - 600 + 999) / 1000; + } + else + { + req.NumPackets = 1; + } + this.RequestedAssets.Remove(assetInf.FullID); + this.AssetRequests.Add(req); } - this.RequestedAssets.Remove(assetInf.FullID); - this.AssetRequests.Add(req); } } } diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 9970d80..ddb5658 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs @@ -105,13 +105,27 @@ namespace OpenSim.Framework.Communications.Caches } } - public void updateItem(LLUUID userID, InventoryItemBase itemInfo) + public void UpdateItem(LLUUID userID, InventoryItemBase itemInfo) { if ((userID == this.UserProfile.UUID) && (this.RootFolder != null)) { this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); } } + + public bool DeleteItem(LLUUID userID, InventoryItemBase item) + { + bool result = false; + if ((userID == this.UserProfile.UUID) && (this.RootFolder != null)) + { + result = RootFolder.DeleteItem(item.inventoryID); + if (result) + { + this.m_parentCommsManager.InventoryServer.DeleteInventoryItem(userID, item); + } + } + return result; + } } diff --git a/OpenSim/Framework/Communications/Cache/InventoryFolder.cs b/OpenSim/Framework/Communications/Cache/InventoryFolder.cs index 6b0e2b4..34f83db 100644 --- a/OpenSim/Framework/Communications/Cache/InventoryFolder.cs +++ b/OpenSim/Framework/Communications/Cache/InventoryFolder.cs @@ -90,6 +90,26 @@ namespace OpenSim.Framework.Communications.Caches return base2; } + public bool DeleteItem(LLUUID itemID) + { + bool found = false; + if (this.Items.ContainsKey(itemID)) + { + Items.Remove(itemID); + return true; + } + foreach (InventoryFolder folder in this.SubFolders.Values) + { + found = folder.DeleteItem(itemID); + if (found == true) + { + break; + } + } + return found; + } + + public InventoryFolder HasSubFolder(LLUUID folderID) { InventoryFolder returnFolder = null; diff --git a/OpenSim/Framework/Communications/IInventoryServices.cs b/OpenSim/Framework/Communications/IInventoryServices.cs index 6f01cf2..bd58756 100644 --- a/OpenSim/Framework/Communications/IInventoryServices.cs +++ b/OpenSim/Framework/Communications/IInventoryServices.cs @@ -16,5 +16,6 @@ namespace OpenSim.Framework.Communications void RequestInventoryForUser(LLUUID userID, InventoryFolderInfo folderCallBack, InventoryItemInfo itemCallBack); void AddNewInventoryFolder(LLUUID userID, InventoryFolder folder); void AddNewInventoryItem(LLUUID userID, InventoryItemBase item); + void DeleteInventoryItem(LLUUID userID, InventoryItemBase item); } } -- cgit v1.1