diff options
author | Sean Dague | 2007-12-03 20:06:01 +0000 |
---|---|---|
committer | Sean Dague | 2007-12-03 20:06:01 +0000 |
commit | 8f58a9a107047bf9d9aff4d8c25171acaa8e9805 (patch) | |
tree | bde9e5b6c29792d19c487549f99f198709e61bc8 /OpenSim/Region/ClientStack | |
parent | * Now using interpolation to expand the 256x256 heightfield data to 512x512 b... (diff) | |
download | opensim-SC-8f58a9a107047bf9d9aff4d8c25171acaa8e9805.zip opensim-SC-8f58a9a107047bf9d9aff4d8c25171acaa8e9805.tar.gz opensim-SC-8f58a9a107047bf9d9aff4d8c25171acaa8e9805.tar.bz2 opensim-SC-8f58a9a107047bf9d9aff4d8c25171acaa8e9805.tar.xz |
From Justin Casey (IBM)
While exploring what it would take to get the 'new script' button working,
I encountered the fact, some way down in the rabbit hole, that if a user
renamed an item in their inventory and logged out (without a restart of
the simulator), on log in the new name was not preserved.
As far as I can see, this was because any updates which didn't occur
inside a transaction were ignored by opensim. This patch pays attention
to those changes. It generates a new asset when an item is updated and
changes the user's inventory properties appropriately. I believe this
behaviour is in line with the copy-on-write semantics used in the Second
Life protocol - perhaps it could be optimized if we knew for sure that the
only copy of the object was in the user's inventory.
This also means that if you rename an item (e.g. a script) before you drag
it into an object's inventory, the inventory will receive the item's most
recent name and description.
Diffstat (limited to 'OpenSim/Region/ClientStack')
-rw-r--r-- | OpenSim/Region/ClientStack/ClientView.cs | 32 |
1 files changed, 19 insertions, 13 deletions
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index f04a70a..1c16a95 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs | |||
@@ -59,7 +59,14 @@ namespace OpenSim.Region.ClientStack | |||
59 | //local handlers for this instance | 59 | //local handlers for this instance |
60 | 60 | ||
61 | private LLUUID m_sessionId; | 61 | private LLUUID m_sessionId; |
62 | public LLUUID SecureSessionID = LLUUID.Zero; | 62 | |
63 | private LLUUID m_secureSessionId = LLUUID.Zero; | ||
64 | |||
65 | public LLUUID SecureSessionId | ||
66 | { | ||
67 | get { return m_secureSessionId; } | ||
68 | } | ||
69 | |||
63 | public string firstName; | 70 | public string firstName; |
64 | public string lastName; | 71 | public string lastName; |
65 | private UseCircuitCodePacket cirpack; | 72 | private UseCircuitCodePacket cirpack; |
@@ -540,7 +547,7 @@ namespace OpenSim.Region.ClientStack | |||
540 | 547 | ||
541 | if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero) | 548 | if (sessionInfo.LoginInfo.SecureSession != LLUUID.Zero) |
542 | { | 549 | { |
543 | SecureSessionID = sessionInfo.LoginInfo.SecureSession; | 550 | m_secureSessionId = sessionInfo.LoginInfo.SecureSession; |
544 | } | 551 | } |
545 | InitNewClient(); | 552 | InitNewClient(); |
546 | 553 | ||
@@ -615,7 +622,7 @@ namespace OpenSim.Region.ClientStack | |||
615 | public event FetchInventoryDescendents OnFetchInventoryDescendents; | 622 | public event FetchInventoryDescendents OnFetchInventoryDescendents; |
616 | public event FetchInventory OnFetchInventory; | 623 | public event FetchInventory OnFetchInventory; |
617 | public event RequestTaskInventory OnRequestTaskInventory; | 624 | public event RequestTaskInventory OnRequestTaskInventory; |
618 | public event UpdateInventoryItemTransaction OnUpdateInventoryItem; | 625 | public event UpdateInventoryItem OnUpdateInventoryItem; |
619 | public event CopyInventoryItem OnCopyInventoryItem; | 626 | public event CopyInventoryItem OnCopyInventoryItem; |
620 | public event UDPAssetUploadRequest OnAssetUploadRequest; | 627 | public event UDPAssetUploadRequest OnAssetUploadRequest; |
621 | public event XferReceive OnXferReceive; | 628 | public event XferReceive OnXferReceive; |
@@ -888,7 +895,7 @@ namespace OpenSim.Region.ClientStack | |||
888 | AgentCircuitData agentData = new AgentCircuitData(); | 895 | AgentCircuitData agentData = new AgentCircuitData(); |
889 | agentData.AgentID = AgentId; | 896 | agentData.AgentID = AgentId; |
890 | agentData.SessionID = m_sessionId; | 897 | agentData.SessionID = m_sessionId; |
891 | agentData.SecureSessionID = SecureSessionID; | 898 | agentData.SecureSessionID = SecureSessionId; |
892 | agentData.circuitcode = m_circuitCode; | 899 | agentData.circuitcode = m_circuitCode; |
893 | agentData.child = false; | 900 | agentData.child = false; |
894 | agentData.firstname = firstName; | 901 | agentData.firstname = firstName; |
@@ -2953,10 +2960,10 @@ namespace OpenSim.Region.ClientStack | |||
2953 | case PacketType.AssetUploadRequest: | 2960 | case PacketType.AssetUploadRequest: |
2954 | AssetUploadRequestPacket request = (AssetUploadRequestPacket) Pack; | 2961 | AssetUploadRequestPacket request = (AssetUploadRequestPacket) Pack; |
2955 | // Console.WriteLine("upload request " + Pack.ToString()); | 2962 | // Console.WriteLine("upload request " + Pack.ToString()); |
2956 | // Console.WriteLine("upload request was for assetid: " + request.AssetBlock.TransactionID.Combine(this.SecureSessionID).ToStringHyphenated()); | 2963 | // Console.WriteLine("upload request was for assetid: " + request.AssetBlock.TransactionID.Combine(this.SecureSessionId).ToStringHyphenated()); |
2957 | if (OnAssetUploadRequest != null) | 2964 | if (OnAssetUploadRequest != null) |
2958 | { | 2965 | { |
2959 | OnAssetUploadRequest(this, request.AssetBlock.TransactionID.Combine(SecureSessionID), | 2966 | OnAssetUploadRequest(this, request.AssetBlock.TransactionID.Combine(SecureSessionId), |
2960 | request.AssetBlock.TransactionID, request.AssetBlock.Type, | 2967 | request.AssetBlock.TransactionID, request.AssetBlock.Type, |
2961 | request.AssetBlock.AssetData, request.AssetBlock.StoreLocal); | 2968 | request.AssetBlock.AssetData, request.AssetBlock.StoreLocal); |
2962 | } | 2969 | } |
@@ -3033,12 +3040,11 @@ namespace OpenSim.Region.ClientStack | |||
3033 | { | 3040 | { |
3034 | for (int i = 0; i < update.InventoryData.Length; i++) | 3041 | for (int i = 0; i < update.InventoryData.Length; i++) |
3035 | { | 3042 | { |
3036 | if (update.InventoryData[i].TransactionID != LLUUID.Zero) | 3043 | OnUpdateInventoryItem(this, update.InventoryData[i].TransactionID, |
3037 | { | 3044 | update.InventoryData[i].ItemID, |
3038 | OnUpdateInventoryItem(this, update.InventoryData[i].TransactionID, | 3045 | Util.FieldToString(update.InventoryData[i].Name), |
3039 | update.InventoryData[i].TransactionID.Combine(SecureSessionID), | 3046 | Util.FieldToString(update.InventoryData[i].Description), |
3040 | update.InventoryData[i].ItemID); | 3047 | update.InventoryData[i].NextOwnerMask); |
3041 | } | ||
3042 | } | 3048 | } |
3043 | } | 3049 | } |
3044 | //Console.WriteLine(Pack.ToString()); | 3050 | //Console.WriteLine(Pack.ToString()); |
@@ -3046,7 +3052,7 @@ namespace OpenSim.Region.ClientStack | |||
3046 | { | 3052 | { |
3047 | if (update.InventoryData[i].TransactionID != LLUUID.Zero) | 3053 | if (update.InventoryData[i].TransactionID != LLUUID.Zero) |
3048 | { | 3054 | { |
3049 | AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionID)); | 3055 | AssetBase asset = m_assetCache.GetAsset(update.InventoryData[i].TransactionID.Combine(this.SecureSessionId)); |
3050 | if (asset != null) | 3056 | if (asset != null) |
3051 | { | 3057 | { |
3052 | // Console.WriteLine("updating inventory item, found asset" + asset.FullID.ToStringHyphenated() + " already in cache"); | 3058 | // Console.WriteLine("updating inventory item, found asset" + asset.FullID.ToStringHyphenated() + " already in cache"); |