diff options
author | MW | 2007-08-14 19:19:09 +0000 |
---|---|---|
committer | MW | 2007-08-14 19:19:09 +0000 |
commit | a979808493b20362ab3fe06ac68e5370622ceafa (patch) | |
tree | b3e2b6bd5b6bd30e7331b15630fd50b8765e0d5f | |
parent | krinkec's updates to ll* interface and functions (diff) | |
download | opensim-SC_OLD-a979808493b20362ab3fe06ac68e5370622ceafa.zip opensim-SC_OLD-a979808493b20362ab3fe06ac68e5370622ceafa.tar.gz opensim-SC_OLD-a979808493b20362ab3fe06ac68e5370622ceafa.tar.bz2 opensim-SC_OLD-a979808493b20362ab3fe06ac68e5370622ceafa.tar.xz |
preliminary support for editing notecards and scripts.
Although there seems to sometimes be a problem of when you login again, old notecards and scripts will have their permissions messed up and you won't be able to even view their text. This seems to be related to the client's cache, and if you clear your client's cache, on the next login they should be fine again. [I have a couple of ideas about what might be causing this so hopefully will have it fixed soon.]
7 files changed, 164 insertions, 22 deletions
diff --git a/OpenSim/Framework/Communications/Cache/AssetTransactions.cs b/OpenSim/Framework/Communications/Cache/AssetTransactions.cs index e12d234..8909bdf 100644 --- a/OpenSim/Framework/Communications/Cache/AssetTransactions.cs +++ b/OpenSim/Framework/Communications/Cache/AssetTransactions.cs | |||
@@ -89,7 +89,7 @@ namespace OpenSim.Framework.Communications.Caches | |||
89 | private string uploaderPath = ""; | 89 | private string uploaderPath = ""; |
90 | 90 | ||
91 | // Events | 91 | // Events |
92 | public event UpLoadedTexture OnUpLoad; | 92 | public event UpLoadedAsset OnUpLoad; |
93 | 93 | ||
94 | // Methods | 94 | // Methods |
95 | public void Initialise(string assetName, string assetDescription, LLUUID assetID, LLUUID inventoryItem, LLUUID folderID, string path, BaseHttpServer httpServer) | 95 | public void Initialise(string assetName, string assetDescription, LLUUID assetID, LLUUID inventoryItem, LLUUID folderID, string path, BaseHttpServer httpServer) |
@@ -230,7 +230,7 @@ namespace OpenSim.Framework.Communications.Caches | |||
230 | private string uploaderPath = ""; | 230 | private string uploaderPath = ""; |
231 | 231 | ||
232 | // Events | 232 | // Events |
233 | public event UpLoadedTexture OnUpLoad; | 233 | public event UpLoadedAsset OnUpLoad; |
234 | 234 | ||
235 | // Methods | 235 | // Methods |
236 | public void Initialise(LLUUID inventoryItem, string path, BaseHttpServer httpServer) | 236 | public void Initialise(LLUUID inventoryItem, string path, BaseHttpServer httpServer) |
diff --git a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs index 57c79b4..9970d80 100644 --- a/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs +++ b/OpenSim/Framework/Communications/Cache/CachedUserInfo.cs | |||
@@ -104,6 +104,14 @@ namespace OpenSim.Framework.Communications.Caches | |||
104 | this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); | 104 | this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); |
105 | } | 105 | } |
106 | } | 106 | } |
107 | |||
108 | public void updateItem(LLUUID userID, InventoryItemBase itemInfo) | ||
109 | { | ||
110 | if ((userID == this.UserProfile.UUID) && (this.RootFolder != null)) | ||
111 | { | ||
112 | this.m_parentCommsManager.InventoryServer.AddNewInventoryItem(userID, itemInfo); | ||
113 | } | ||
114 | } | ||
107 | } | 115 | } |
108 | 116 | ||
109 | 117 | ||
diff --git a/OpenSim/Framework/Communications/Capabilities/Caps.cs b/OpenSim/Framework/Communications/Capabilities/Caps.cs index eb88aa7..14f9c95 100644 --- a/OpenSim/Framework/Communications/Capabilities/Caps.cs +++ b/OpenSim/Framework/Communications/Capabilities/Caps.cs | |||
@@ -39,8 +39,10 @@ using OpenSim.Framework.Data; | |||
39 | 39 | ||
40 | namespace OpenSim.Region.Capabilities | 40 | namespace OpenSim.Region.Capabilities |
41 | { | 41 | { |
42 | public delegate void UpLoadedTexture(string assetName, string description, LLUUID assetID, LLUUID inventoryItem, LLUUID parentFolder, byte[] data); | 42 | public delegate void UpLoadedAsset(string assetName, string description, LLUUID assetID, LLUUID inventoryItem, LLUUID parentFolder, byte[] data); |
43 | public delegate LLUUID UpdateItem(LLUUID itemID, byte[] data); | ||
43 | public delegate void NewInventoryItem(LLUUID userID, InventoryItemBase item); | 44 | public delegate void NewInventoryItem(LLUUID userID, InventoryItemBase item); |
45 | public delegate LLUUID ItemUpdatedCallback(LLUUID userID, LLUUID itemID, byte[] data); | ||
44 | 46 | ||
45 | public class Caps | 47 | public class Caps |
46 | { | 48 | { |
@@ -59,6 +61,7 @@ namespace OpenSim.Region.Capabilities | |||
59 | private int eventQueueCount = 1; | 61 | private int eventQueueCount = 1; |
60 | private Queue<string> CapsEventQueue = new Queue<string>(); | 62 | private Queue<string> CapsEventQueue = new Queue<string>(); |
61 | public NewInventoryItem AddNewInventoryItem = null; | 63 | public NewInventoryItem AddNewInventoryItem = null; |
64 | public ItemUpdatedCallback ItemUpdatedCall = null; | ||
62 | 65 | ||
63 | public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, int httpPort, string capsPath, LLUUID agent) | 66 | public Caps(AssetCache assetCach, BaseHttpServer httpServer, string httpListen, int httpPort, string capsPath, LLUUID agent) |
64 | { | 67 | { |
@@ -125,7 +128,8 @@ namespace OpenSim.Region.Capabilities | |||
125 | string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; | 128 | string capsBaseUrl = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + "/CAPS/" + m_capsObjectPath; |
126 | caps.MapLayer = capsBaseUrl + m_mapLayerPath; | 129 | caps.MapLayer = capsBaseUrl + m_mapLayerPath; |
127 | caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; | 130 | caps.NewFileAgentInventory = capsBaseUrl + m_newInventory; |
128 | // caps.UpdateNotecardAgentInventory = capsBaseUrl + m_notecardUpdatePath; | 131 | caps.UpdateNotecardAgentInventory = capsBaseUrl + m_notecardUpdatePath; |
132 | caps.UpdateScriptAgentInventory = capsBaseUrl + m_notecardUpdatePath; | ||
129 | return caps; | 133 | return caps; |
130 | } | 134 | } |
131 | 135 | ||
@@ -238,21 +242,24 @@ namespace OpenSim.Region.Capabilities | |||
238 | /// <returns></returns> | 242 | /// <returns></returns> |
239 | public string NoteCardAgentInventory(string request, string path, string param) | 243 | public string NoteCardAgentInventory(string request, string path, string param) |
240 | { | 244 | { |
241 | Console.WriteLine("notecard update request " + request); | 245 | Hashtable hash = (Hashtable)LLSD.LLSDDeserialize(Helpers.StringToField(request)); |
242 | string assetName = "notecardupdate"; | 246 | LLSDItemUpdate llsdRequest = new LLSDItemUpdate(); |
247 | LLSDHelpers.DeserialiseLLSDMap(hash, llsdRequest); | ||
248 | |||
243 | string capsBase = "/CAPS/" + m_capsObjectPath; | 249 | string capsBase = "/CAPS/" + m_capsObjectPath; |
244 | LLUUID newAsset = LLUUID.Random(); | 250 | LLUUID newInvItem = llsdRequest.item_id; |
245 | LLUUID newInvItem = LLUUID.Random(); | ||
246 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); | 251 | string uploaderPath = Util.RandomClass.Next(5000, 8000).ToString("0000"); |
247 | 252 | ||
248 | AssetUploader uploader = new AssetUploader(assetName, "description", newAsset, newInvItem, LLUUID.Zero, "", "", capsBase + uploaderPath, this.httpListener); | 253 | ItemUpdater uploader = new ItemUpdater(newInvItem, capsBase + uploaderPath, this.httpListener); |
254 | uploader.OnUpLoad += this.ItemUpdated; | ||
255 | |||
249 | httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); | 256 | httpListener.AddStreamHandler(new BinaryStreamHandler("POST", capsBase + uploaderPath, uploader.uploaderCaps)); |
250 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + capsBase + uploaderPath; | 257 | string uploaderURL = "http://" + m_httpListenerHostName + ":" + m_httpListenPort.ToString() + capsBase + uploaderPath; |
251 | 258 | ||
252 | LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); | 259 | LLSDAssetUploadResponse uploadResponse = new LLSDAssetUploadResponse(); |
253 | uploadResponse.uploader = uploaderURL; | 260 | uploadResponse.uploader = uploaderURL; |
254 | uploadResponse.state = "upload"; | 261 | uploadResponse.state = "upload"; |
255 | // uploader.OnUpLoad += this.UploadCompleteHandler; | 262 | |
256 | return LLSDHelpers.SerialiseLLSDReply(uploadResponse); | 263 | return LLSDHelpers.SerialiseLLSDReply(uploadResponse); |
257 | } | 264 | } |
258 | 265 | ||
@@ -321,9 +328,18 @@ namespace OpenSim.Region.Capabilities | |||
321 | 328 | ||
322 | } | 329 | } |
323 | 330 | ||
331 | public LLUUID ItemUpdated(LLUUID itemID, byte[] data) | ||
332 | { | ||
333 | if (ItemUpdatedCall != null) | ||
334 | { | ||
335 | return ItemUpdatedCall(this.agentID, itemID, data); | ||
336 | } | ||
337 | return LLUUID.Zero; | ||
338 | } | ||
339 | |||
324 | public class AssetUploader | 340 | public class AssetUploader |
325 | { | 341 | { |
326 | public event UpLoadedTexture OnUpLoad; | 342 | public event UpLoadedAsset OnUpLoad; |
327 | 343 | ||
328 | private string uploaderPath = ""; | 344 | private string uploaderPath = ""; |
329 | private LLUUID newAssetID; | 345 | private LLUUID newAssetID; |
@@ -392,6 +408,74 @@ namespace OpenSim.Region.Capabilities | |||
392 | fs.Close(); | 408 | fs.Close(); |
393 | } | 409 | } |
394 | } | 410 | } |
411 | |||
412 | public class ItemUpdater | ||
413 | { | ||
414 | public event UpdateItem OnUpLoad; | ||
415 | |||
416 | private string uploaderPath = ""; | ||
417 | private LLUUID inventoryItemID; | ||
418 | private BaseHttpServer httpListener; | ||
419 | private bool SaveAssets = false; | ||
420 | |||
421 | |||
422 | /// <summary> | ||
423 | /// | ||
424 | /// </summary> | ||
425 | /// <param name="assetID"></param> | ||
426 | /// <param name="inventoryItem"></param> | ||
427 | /// <param name="path"></param> | ||
428 | /// <param name="httpServer"></param> | ||
429 | public ItemUpdater( LLUUID inventoryItem, string path, BaseHttpServer httpServer) | ||
430 | { | ||
431 | |||
432 | inventoryItemID = inventoryItem; | ||
433 | uploaderPath = path; | ||
434 | httpListener = httpServer; | ||
435 | } | ||
436 | |||
437 | /// <summary> | ||
438 | /// | ||
439 | /// </summary> | ||
440 | /// <param name="data"></param> | ||
441 | /// <param name="path"></param> | ||
442 | /// <param name="param"></param> | ||
443 | /// <returns></returns> | ||
444 | public string uploaderCaps(byte[] data, string path, string param) | ||
445 | { | ||
446 | LLUUID inv = this.inventoryItemID; | ||
447 | string res = ""; | ||
448 | LLSDAssetUploadComplete uploadComplete = new LLSDAssetUploadComplete(); | ||
449 | LLUUID assetID = LLUUID.Zero; | ||
450 | |||
451 | if (OnUpLoad != null) | ||
452 | { | ||
453 | assetID = OnUpLoad(inv, data); | ||
454 | } | ||
455 | |||
456 | uploadComplete.new_asset = assetID.ToStringHyphenated(); | ||
457 | uploadComplete.new_inventory_item = inv; | ||
458 | uploadComplete.state = "complete"; | ||
459 | |||
460 | res = LLSDHelpers.SerialiseLLSDReply(uploadComplete); | ||
461 | |||
462 | httpListener.RemoveStreamHandler("POST", uploaderPath); | ||
463 | |||
464 | if (this.SaveAssets) | ||
465 | this.SaveAssetToFile("updateditem"+Util.RandomClass.Next(1,1000) + ".dat", data); | ||
466 | |||
467 | return res; | ||
468 | } | ||
469 | |||
470 | private void SaveAssetToFile(string filename, byte[] data) | ||
471 | { | ||
472 | FileStream fs = File.Create(filename); | ||
473 | BinaryWriter bw = new BinaryWriter(fs); | ||
474 | bw.Write(data); | ||
475 | bw.Close(); | ||
476 | fs.Close(); | ||
477 | } | ||
478 | } | ||
395 | } | 479 | } |
396 | } | 480 | } |
397 | 481 | ||
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs b/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs index 913d7ab..af20468 100644 --- a/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs +++ b/OpenSim/Framework/Communications/Capabilities/LLSDCapsDetails.cs | |||
@@ -9,6 +9,7 @@ namespace OpenSim.Region.Capabilities | |||
9 | // public string RequestTextureDownload = ""; | 9 | // public string RequestTextureDownload = ""; |
10 | // public string ChatSessionRequest = ""; | 10 | // public string ChatSessionRequest = ""; |
11 | public string UpdateNotecardAgentInventory = ""; | 11 | public string UpdateNotecardAgentInventory = ""; |
12 | public string UpdateScriptAgentInventory = ""; | ||
12 | // public string ParcelVoiceInfoRequest = ""; | 13 | // public string ParcelVoiceInfoRequest = ""; |
13 | 14 | ||
14 | public LLSDCapsDetails() | 15 | public LLSDCapsDetails() |
diff --git a/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs b/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs new file mode 100644 index 0000000..d47bb07 --- /dev/null +++ b/OpenSim/Framework/Communications/Capabilities/LLSDItemUpdate.cs | |||
@@ -0,0 +1,17 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using libsecondlife; | ||
5 | |||
6 | namespace OpenSim.Region.Capabilities | ||
7 | { | ||
8 | [LLSDMap] | ||
9 | public class LLSDItemUpdate | ||
10 | { | ||
11 | public LLUUID item_id; | ||
12 | |||
13 | public LLSDItemUpdate() | ||
14 | { | ||
15 | } | ||
16 | } | ||
17 | } | ||
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index e61a5bd..bba0138 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs | |||
@@ -732,15 +732,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
732 | } | 732 | } |
733 | } | 733 | } |
734 | 734 | ||
735 | /// <summary> | ||
736 | /// Sends prims to a client | ||
737 | /// </summary> | ||
738 | /// <param name="RemoteClient">Client to send to</param> | ||
739 | public void GetInitialPrims(IClientAPI RemoteClient) | ||
740 | { | ||
741 | |||
742 | } | ||
743 | |||
744 | public void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) | 735 | public void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) |
745 | { | 736 | { |
746 | this.EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); | 737 | this.EventManager.TriggerObjectGrab(localID, offsetPos, remoteClient); |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 73133d4..bfc3ee8 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -827,6 +827,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
827 | agent.CapsPath, agent.AgentID); | 827 | agent.CapsPath, agent.AgentID); |
828 | cap.RegisterHandlers(); | 828 | cap.RegisterHandlers(); |
829 | cap.AddNewInventoryItem = this.AddInventoryItem; | 829 | cap.AddNewInventoryItem = this.AddInventoryItem; |
830 | cap.ItemUpdatedCall = this.UpdateInventoryItemAsset; | ||
830 | if (capsHandlers.ContainsKey(agent.AgentID)) | 831 | if (capsHandlers.ContainsKey(agent.AgentID)) |
831 | { | 832 | { |
832 | MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " + | 833 | MainLog.Instance.Warn("client", "Adding duplicate CAPS entry for user " + |
@@ -1023,7 +1024,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1023 | { | 1024 | { |
1024 | ScriptEngines.Add(ScriptEngine); | 1025 | ScriptEngines.Add(ScriptEngine); |
1025 | 1026 | ||
1026 | ScriptEngine.InitializeEngine(this, m_logger); | 1027 | ScriptEngine.InitializeEngine(this, m_logger); |
1027 | } | 1028 | } |
1028 | #endregion | 1029 | #endregion |
1029 | 1030 | ||
@@ -1046,7 +1047,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1046 | 1047 | ||
1047 | public void AddInventoryItem(LLUUID userID, InventoryItemBase item) | 1048 | public void AddInventoryItem(LLUUID userID, InventoryItemBase item) |
1048 | { | 1049 | { |
1049 | if(this.Avatars.ContainsKey(userID)) | 1050 | if (this.Avatars.ContainsKey(userID)) |
1050 | { | 1051 | { |
1051 | this.AddInventoryItem(this.Avatars[userID].ControllingClient, item); | 1052 | this.AddInventoryItem(this.Avatars[userID].ControllingClient, item); |
1052 | } | 1053 | } |
@@ -1062,5 +1063,45 @@ namespace OpenSim.Region.Environment.Scenes | |||
1062 | } | 1063 | } |
1063 | } | 1064 | } |
1064 | 1065 | ||
1066 | public LLUUID UpdateInventoryItemAsset(LLUUID userID, LLUUID itemID, byte[] data) | ||
1067 | { | ||
1068 | if (this.Avatars.ContainsKey(userID)) | ||
1069 | { | ||
1070 | return this.UpdateInventoryItemAsset(this.Avatars[userID].ControllingClient, itemID, data); | ||
1071 | } | ||
1072 | return LLUUID.Zero; | ||
1073 | } | ||
1074 | |||
1075 | public LLUUID UpdateInventoryItemAsset(IClientAPI remoteClient, LLUUID itemID, byte[] data) | ||
1076 | { | ||
1077 | CachedUserInfo userInfo = commsManager.UserProfiles.GetUserDetails(remoteClient.AgentId); | ||
1078 | if (userInfo != null) | ||
1079 | { | ||
1080 | if (userInfo.RootFolder != null) | ||
1081 | { | ||
1082 | InventoryItemBase item = userInfo.RootFolder.HasItem(itemID); | ||
1083 | if (item != null) | ||
1084 | { | ||
1085 | AssetBase asset; | ||
1086 | asset = new AssetBase(); | ||
1087 | asset.FullID = LLUUID.Random(); | ||
1088 | asset.Type = (sbyte)item.assetType; | ||
1089 | asset.InvType = (sbyte)item.invType; | ||
1090 | asset.Name = item.inventoryName; | ||
1091 | asset.Data = data; | ||
1092 | this.assetCache.AddAsset(asset); | ||
1093 | |||
1094 | item.assetID = asset.FullID; | ||
1095 | userInfo.updateItem(remoteClient.AgentId, item); | ||
1096 | |||
1097 | remoteClient.SendInventoryItemUpdate(item); | ||
1098 | |||
1099 | return (asset.FullID); | ||
1100 | } | ||
1101 | } | ||
1102 | } | ||
1103 | return LLUUID.Zero; | ||
1104 | } | ||
1105 | |||
1065 | } | 1106 | } |
1066 | } | 1107 | } |