diff options
Diffstat (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs')
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs | 150 |
1 files changed, 76 insertions, 74 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs index 0215cec..c8a8f95 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.Inventory.cs | |||
@@ -41,7 +41,12 @@ namespace OpenSim.Region.Environment.Scenes | |||
41 | { | 41 | { |
42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
43 | 43 | ||
44 | private string m_inventoryFileName = String.Empty; | 44 | private readonly string m_inventoryFileName = String.Empty; |
45 | |||
46 | /// <summary> | ||
47 | /// Tracks whether inventory has changed since the last persistent backup | ||
48 | /// </summary> | ||
49 | private bool HasInventoryChanged; | ||
45 | 50 | ||
46 | /// <summary> | 51 | /// <summary> |
47 | /// The inventory folder for this prim | 52 | /// The inventory folder for this prim |
@@ -49,6 +54,17 @@ namespace OpenSim.Region.Environment.Scenes | |||
49 | private LLUUID m_folderID = LLUUID.Zero; | 54 | private LLUUID m_folderID = LLUUID.Zero; |
50 | 55 | ||
51 | /// <summary> | 56 | /// <summary> |
57 | /// Serial count for inventory file , used to tell if inventory has changed | ||
58 | /// no need for this to be part of Database backup | ||
59 | /// </summary> | ||
60 | protected uint m_inventorySerial; | ||
61 | |||
62 | /// <summary> | ||
63 | /// Holds in memory prim inventory | ||
64 | /// </summary> | ||
65 | protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); | ||
66 | |||
67 | /// <summary> | ||
52 | /// Exposing this is not particularly good, but it's one of the least evils at the moment to see | 68 | /// Exposing this is not particularly good, but it's one of the least evils at the moment to see |
53 | /// folder id from prim inventory item data, since it's not (yet) actually stored with the prim. | 69 | /// folder id from prim inventory item data, since it's not (yet) actually stored with the prim. |
54 | /// </summary> | 70 | /// </summary> |
@@ -58,23 +74,12 @@ namespace OpenSim.Region.Environment.Scenes | |||
58 | set { m_folderID = value; } | 74 | set { m_folderID = value; } |
59 | } | 75 | } |
60 | 76 | ||
61 | /// <summary> | ||
62 | /// Serial count for inventory file , used to tell if inventory has changed | ||
63 | /// no need for this to be part of Database backup | ||
64 | /// </summary> | ||
65 | protected uint m_inventorySerial = 0; | ||
66 | |||
67 | public uint InventorySerial | 77 | public uint InventorySerial |
68 | { | 78 | { |
69 | get { return m_inventorySerial; } | 79 | get { return m_inventorySerial; } |
70 | set { m_inventorySerial = value; } | 80 | set { m_inventorySerial = value; } |
71 | } | 81 | } |
72 | 82 | ||
73 | /// <summary> | ||
74 | /// Holds in memory prim inventory | ||
75 | /// </summary> | ||
76 | protected TaskInventoryDictionary m_taskInventory = new TaskInventoryDictionary(); | ||
77 | |||
78 | public TaskInventoryDictionary TaskInventory | 83 | public TaskInventoryDictionary TaskInventory |
79 | { | 84 | { |
80 | get { return m_taskInventory; } | 85 | get { return m_taskInventory; } |
@@ -82,11 +87,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
82 | } | 87 | } |
83 | 88 | ||
84 | /// <summary> | 89 | /// <summary> |
85 | /// Tracks whether inventory has changed since the last persistent backup | ||
86 | /// </summary> | ||
87 | private bool HasInventoryChanged; | ||
88 | |||
89 | /// <summary> | ||
90 | /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating | 90 | /// Reset LLUUIDs for all the items in the prim's inventory. This involves either generating |
91 | /// new ones or setting existing UUIDs to the correct parent UUIDs. | 91 | /// new ones or setting existing UUIDs to the correct parent UUIDs. |
92 | /// | 92 | /// |
@@ -96,14 +96,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
96 | public void ResetInventoryIDs() | 96 | public void ResetInventoryIDs() |
97 | { | 97 | { |
98 | lock (TaskInventory) | 98 | lock (TaskInventory) |
99 | { | 99 | { |
100 | if (0 == TaskInventory.Count) | 100 | if (0 == TaskInventory.Count) |
101 | { | 101 | { |
102 | return; | 102 | return; |
103 | } | 103 | } |
104 | 104 | ||
105 | HasInventoryChanged = true; | 105 | HasInventoryChanged = true; |
106 | 106 | ||
107 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(TaskInventory.Values); | 107 | IList<TaskInventoryItem> items = new List<TaskInventoryItem>(TaskInventory.Values); |
108 | TaskInventory.Clear(); | 108 | TaskInventory.Clear(); |
109 | 109 | ||
@@ -132,9 +132,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
132 | if (ownerId != item.OwnerID) | 132 | if (ownerId != item.OwnerID) |
133 | { | 133 | { |
134 | item.LastOwnerID = item.OwnerID; | 134 | item.LastOwnerID = item.OwnerID; |
135 | item.OwnerID = ownerId; | 135 | item.OwnerID = ownerId; |
136 | item.BaseMask = item.NextOwnerMask & (uint)PermissionMask.All; | 136 | item.BaseMask = item.NextOwnerMask & (uint) PermissionMask.All; |
137 | item.OwnerMask = item.NextOwnerMask & (uint)PermissionMask.All; | 137 | item.OwnerMask = item.NextOwnerMask & (uint) PermissionMask.All; |
138 | } | 138 | } |
139 | } | 139 | } |
140 | } | 140 | } |
@@ -194,22 +194,22 @@ namespace OpenSim.Region.Environment.Scenes | |||
194 | AssetCache cache = m_parentGroup.Scene.AssetCache; | 194 | AssetCache cache = m_parentGroup.Scene.AssetCache; |
195 | 195 | ||
196 | cache.GetAsset(item.AssetID, delegate(LLUUID assetID, AssetBase asset) | 196 | cache.GetAsset(item.AssetID, delegate(LLUUID assetID, AssetBase asset) |
197 | { | 197 | { |
198 | if (null == asset) | 198 | if (null == asset) |
199 | { | 199 | { |
200 | m_log.ErrorFormat( | 200 | m_log.ErrorFormat( |
201 | "[PRIMINVENTORY]: " + | 201 | "[PRIMINVENTORY]: " + |
202 | "Couldn't start script {0}, {1} since asset ID {2} could not be found", | 202 | "Couldn't start script {0}, {1} since asset ID {2} could not be found", |
203 | item.Name, item.ItemID, item.AssetID); | 203 | item.Name, item.ItemID, item.AssetID); |
204 | } | 204 | } |
205 | else | 205 | else |
206 | { | 206 | { |
207 | string script = Helpers.FieldToUTF8String(asset.Data); | 207 | string script = Helpers.FieldToUTF8String(asset.Data); |
208 | m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId,item.ItemID,script); | 208 | m_parentGroup.Scene.EventManager.TriggerRezScript(LocalId, item.ItemID, script); |
209 | m_parentGroup.AddActiveScriptCount(1); | 209 | m_parentGroup.AddActiveScriptCount(1); |
210 | ScheduleFullUpdate(); | 210 | ScheduleFullUpdate(); |
211 | } | 211 | } |
212 | }, false); | 212 | }, false); |
213 | } | 213 | } |
214 | } | 214 | } |
215 | 215 | ||
@@ -226,7 +226,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
226 | if (m_taskInventory.ContainsKey(itemId)) | 226 | if (m_taskInventory.ContainsKey(itemId)) |
227 | { | 227 | { |
228 | StartScript(m_taskInventory[itemId]); | 228 | StartScript(m_taskInventory[itemId]); |
229 | |||
230 | } | 229 | } |
231 | else | 230 | else |
232 | { | 231 | { |
@@ -263,7 +262,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
263 | { | 262 | { |
264 | foreach (TaskInventoryItem item in m_taskInventory.Values) | 263 | foreach (TaskInventoryItem item in m_taskInventory.Values) |
265 | { | 264 | { |
266 | if(item.Name == name) | 265 | if (item.Name == name) |
267 | return true; | 266 | return true; |
268 | } | 267 | } |
269 | return false; | 268 | return false; |
@@ -271,14 +270,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
271 | 270 | ||
272 | private string FindAvailableInventoryName(string name) | 271 | private string FindAvailableInventoryName(string name) |
273 | { | 272 | { |
274 | if(!InventoryContainsName(name)) | 273 | if (!InventoryContainsName(name)) |
275 | return name; | 274 | return name; |
276 | 275 | ||
277 | int suffix=1; | 276 | int suffix = 1; |
278 | while(suffix < 256) | 277 | while (suffix < 256) |
279 | { | 278 | { |
280 | string tryName=String.Format("{0} {1}", name, suffix); | 279 | string tryName = String.Format("{0} {1}", name, suffix); |
281 | if(!InventoryContainsName(tryName)) | 280 | if (!InventoryContainsName(tryName)) |
282 | return tryName; | 281 | return tryName; |
283 | suffix++; | 282 | suffix++; |
284 | } | 283 | } |
@@ -295,11 +294,11 @@ namespace OpenSim.Region.Environment.Scenes | |||
295 | item.CreationDate = 1000; | 294 | item.CreationDate = 1000; |
296 | item.ParentPartID = UUID; | 295 | item.ParentPartID = UUID; |
297 | 296 | ||
298 | string name=FindAvailableInventoryName(item.Name); | 297 | string name = FindAvailableInventoryName(item.Name); |
299 | if(name == String.Empty) | 298 | if (name == String.Empty) |
300 | return; | 299 | return; |
301 | 300 | ||
302 | item.Name=name; | 301 | item.Name = name; |
303 | 302 | ||
304 | lock (m_taskInventory) | 303 | lock (m_taskInventory) |
305 | { | 304 | { |
@@ -347,7 +346,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
347 | // m_log.DebugFormat( | 346 | // m_log.DebugFormat( |
348 | // "[PRIM INVENTORY]: Retrieved task inventory item {0}, {1} from prim {2}, {3}", | 347 | // "[PRIM INVENTORY]: Retrieved task inventory item {0}, {1} from prim {2}, {3}", |
349 | // m_taskInventory[itemID].Name, itemID, Name, UUID); | 348 | // m_taskInventory[itemID].Name, itemID, Name, UUID); |
350 | 349 | ||
351 | return m_taskInventory[itemID]; | 350 | return m_taskInventory[itemID]; |
352 | } | 351 | } |
353 | else | 352 | else |
@@ -428,7 +427,6 @@ namespace OpenSim.Region.Environment.Scenes | |||
428 | scriptcount++; | 427 | scriptcount++; |
429 | } | 428 | } |
430 | } | 429 | } |
431 | |||
432 | } | 430 | } |
433 | if (scriptcount <= 0) | 431 | if (scriptcount <= 0) |
434 | { | 432 | { |
@@ -457,14 +455,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
457 | /// <param name="client"></param> | 455 | /// <param name="client"></param> |
458 | /// <param name="localID"></param> | 456 | /// <param name="localID"></param> |
459 | public bool GetInventoryFileName(IClientAPI client, uint localID) | 457 | public bool GetInventoryFileName(IClientAPI client, uint localID) |
460 | { | 458 | { |
461 | // m_log.DebugFormat( | 459 | // m_log.DebugFormat( |
462 | // "[PRIM INVENTORY]: Received request from client {0} for inventory file name of {1}, {2}", | 460 | // "[PRIM INVENTORY]: Received request from client {0} for inventory file name of {1}, {2}", |
463 | // client.AgentId, Name, UUID); | 461 | // client.AgentId, Name, UUID); |
464 | 462 | ||
465 | if (m_inventorySerial > 0) | 463 | if (m_inventorySerial > 0) |
466 | { | 464 | { |
467 | client.SendTaskInventory(m_uuid, (short)m_inventorySerial, | 465 | client.SendTaskInventory(m_uuid, (short) m_inventorySerial, |
468 | Helpers.StringToField(m_inventoryFileName)); | 466 | Helpers.StringToField(m_inventoryFileName)); |
469 | return true; | 467 | return true; |
470 | } | 468 | } |
@@ -480,9 +478,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
480 | /// </summary> | 478 | /// </summary> |
481 | /// <param name="xferManager"></param> | 479 | /// <param name="xferManager"></param> |
482 | public void RequestInventoryFile(IXfer xferManager) | 480 | public void RequestInventoryFile(IXfer xferManager) |
483 | { | 481 | { |
484 | byte[] fileData = new byte[0]; | 482 | byte[] fileData = new byte[0]; |
485 | 483 | ||
486 | // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero. This matches | 484 | // Confusingly, the folder item has to be the object id, while the 'parent id' has to be zero. This matches |
487 | // what appears to happen in the Second Life protocol. If this isn't the case. then various functionality | 485 | // what appears to happen in the Second Life protocol. If this isn't the case. then various functionality |
488 | // isn't available (such as drag from prim inventory to agent inventory) | 486 | // isn't available (such as drag from prim inventory to agent inventory) |
@@ -493,53 +491,53 @@ namespace OpenSim.Region.Environment.Scenes | |||
493 | foreach (TaskInventoryItem item in m_taskInventory.Values) | 491 | foreach (TaskInventoryItem item in m_taskInventory.Values) |
494 | { | 492 | { |
495 | invString.AddItemStart(); | 493 | invString.AddItemStart(); |
496 | invString.AddNameValueLine("item_id", item.ItemID.ToString()); | 494 | invString.AddNameValueLine("item_id", item.ItemID.ToString()); |
497 | invString.AddNameValueLine("parent_id", m_folderID.ToString()); | 495 | invString.AddNameValueLine("parent_id", m_folderID.ToString()); |
498 | 496 | ||
499 | invString.AddPermissionsStart(); | 497 | invString.AddPermissionsStart(); |
500 | 498 | ||
501 | // FIXME: Temporary until permissions are properly sorted. | 499 | // FIXME: Temporary until permissions are properly sorted. |
502 | invString.AddNameValueLine("base_mask", "7fffffff"); | 500 | invString.AddNameValueLine("base_mask", "7fffffff"); |
503 | invString.AddNameValueLine("owner_mask", "7fffffff"); | 501 | invString.AddNameValueLine("owner_mask", "7fffffff"); |
504 | invString.AddNameValueLine("group_mask", "7fffffff"); | 502 | invString.AddNameValueLine("group_mask", "7fffffff"); |
505 | invString.AddNameValueLine("everyone_mask", "7fffffff"); | 503 | invString.AddNameValueLine("everyone_mask", "7fffffff"); |
506 | invString.AddNameValueLine("next_owner_mask", "7fffffff"); | 504 | invString.AddNameValueLine("next_owner_mask", "7fffffff"); |
507 | 505 | ||
508 | // invString.AddNameValueLine("group_mask", "00000000"); | 506 | // invString.AddNameValueLine("group_mask", "00000000"); |
509 | // invString.AddNameValueLine("everyone_mask", "00000000"); | 507 | // invString.AddNameValueLine("everyone_mask", "00000000"); |
510 | // invString.AddNameValueLine("next_owner_mask", "00086000"); | 508 | // invString.AddNameValueLine("next_owner_mask", "00086000"); |
511 | 509 | ||
512 | // invString.AddNameValueLine("base_mask", Helpers.UIntToHexString(item.BaseMask)); | 510 | // invString.AddNameValueLine("base_mask", Helpers.UIntToHexString(item.BaseMask)); |
513 | // invString.AddNameValueLine("owner_mask", Helpers.UIntToHexString(item.OwnerMask)); | 511 | // invString.AddNameValueLine("owner_mask", Helpers.UIntToHexString(item.OwnerMask)); |
514 | // invString.AddNameValueLine("group_mask", Helpers.UIntToHexString(item.GroupMask)); | 512 | // invString.AddNameValueLine("group_mask", Helpers.UIntToHexString(item.GroupMask)); |
515 | // invString.AddNameValueLine("everyone_mask", Helpers.UIntToHexString(item.EveryoneMask)); | 513 | // invString.AddNameValueLine("everyone_mask", Helpers.UIntToHexString(item.EveryoneMask)); |
516 | // invString.AddNameValueLine("next_owner_mask", Helpers.UIntToHexString(item.NextOwnerMask)); | 514 | // invString.AddNameValueLine("next_owner_mask", Helpers.UIntToHexString(item.NextOwnerMask)); |
517 | 515 | ||
518 | invString.AddNameValueLine("creator_id", item.CreatorID.ToString()); | 516 | invString.AddNameValueLine("creator_id", item.CreatorID.ToString()); |
519 | invString.AddNameValueLine("owner_id", item.OwnerID.ToString()); | 517 | invString.AddNameValueLine("owner_id", item.OwnerID.ToString()); |
520 | 518 | ||
521 | invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString()); | 519 | invString.AddNameValueLine("last_owner_id", item.LastOwnerID.ToString()); |
522 | // invString.AddNameValueLine("last_owner_id", item.OwnerID.ToString()); | 520 | // invString.AddNameValueLine("last_owner_id", item.OwnerID.ToString()); |
523 | 521 | ||
524 | invString.AddNameValueLine("group_id", item.GroupID.ToString()); | 522 | invString.AddNameValueLine("group_id", item.GroupID.ToString()); |
525 | invString.AddSectionEnd(); | 523 | invString.AddSectionEnd(); |
526 | 524 | ||
527 | invString.AddNameValueLine("asset_id", item.AssetID.ToString()); | 525 | invString.AddNameValueLine("asset_id", item.AssetID.ToString()); |
528 | invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]); | 526 | invString.AddNameValueLine("type", TaskInventoryItem.Types[item.Type]); |
529 | invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]); | 527 | invString.AddNameValueLine("inv_type", TaskInventoryItem.InvTypes[item.InvType]); |
530 | invString.AddNameValueLine("flags", "00000000"); | 528 | invString.AddNameValueLine("flags", "00000000"); |
531 | 529 | ||
532 | invString.AddSaleStart(); | 530 | invString.AddSaleStart(); |
533 | invString.AddNameValueLine("sale_type", "not"); | 531 | invString.AddNameValueLine("sale_type", "not"); |
534 | invString.AddNameValueLine("sale_price", "0"); | 532 | invString.AddNameValueLine("sale_price", "0"); |
535 | invString.AddSectionEnd(); | 533 | invString.AddSectionEnd(); |
536 | 534 | ||
537 | invString.AddNameValueLine("name", item.Name + "|"); | 535 | invString.AddNameValueLine("name", item.Name + "|"); |
538 | invString.AddNameValueLine("desc", item.Description + "|"); | 536 | invString.AddNameValueLine("desc", item.Description + "|"); |
539 | 537 | ||
540 | invString.AddNameValueLine("creation_date", item.CreationDate.ToString()); | 538 | invString.AddNameValueLine("creation_date", item.CreationDate.ToString()); |
541 | // invString.AddNameValueLine("creation_date", "1209151453"); | 539 | // invString.AddNameValueLine("creation_date", "1209151453"); |
542 | 540 | ||
543 | invString.AddSectionEnd(); | 541 | invString.AddSectionEnd(); |
544 | } | 542 | } |
545 | } | 543 | } |
@@ -571,6 +569,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
571 | } | 569 | } |
572 | } | 570 | } |
573 | 571 | ||
572 | #region Nested type: InventoryStringBuilder | ||
573 | |||
574 | public class InventoryStringBuilder | 574 | public class InventoryStringBuilder |
575 | { | 575 | { |
576 | public string BuildString = String.Empty; | 576 | public string BuildString = String.Empty; |
@@ -596,13 +596,13 @@ namespace OpenSim.Region.Environment.Scenes | |||
596 | BuildString += "\tpermissions 0\n"; | 596 | BuildString += "\tpermissions 0\n"; |
597 | AddSectionStart(); | 597 | AddSectionStart(); |
598 | } | 598 | } |
599 | 599 | ||
600 | public void AddSaleStart() | 600 | public void AddSaleStart() |
601 | { | 601 | { |
602 | BuildString += "\tsale_info\t0\n"; | 602 | BuildString += "\tsale_info\t0\n"; |
603 | AddSectionStart(); | 603 | AddSectionStart(); |
604 | } | 604 | } |
605 | 605 | ||
606 | protected void AddSectionStart() | 606 | protected void AddSectionStart() |
607 | { | 607 | { |
608 | BuildString += "\t{\n"; | 608 | BuildString += "\t{\n"; |
@@ -629,5 +629,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
629 | { | 629 | { |
630 | } | 630 | } |
631 | } | 631 | } |
632 | |||
633 | #endregion | ||
632 | } | 634 | } |
633 | } | 635 | } \ No newline at end of file |