From e83893c8bcb26d0af191df7e19c5059c80896f51 Mon Sep 17 00:00:00 2001
From: teravus
Date: Tue, 29 Jan 2013 06:12:04 -0500
Subject: * This Checks the asset of each wearable asynchronously and repairs
 if it's required.

---
 .../Avatar/AvatarFactory/AvatarFactoryModule.cs    | 35 ++++++++++++++--------
 1 file changed, 23 insertions(+), 12 deletions(-)

(limited to 'OpenSim')

diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index a9d11d5..1adff7e 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -691,7 +691,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                                 case WearableType.Shape:
                                 case WearableType.Skin:
                                 //case WearableType.Underpants:
-                                    TryAndRepair((WearableType)i, invService, userID, appearance);
+                                    TryAndRepairBrokenWearable((WearableType)i, invService, userID, appearance);
                                     resetwearable = true;
                                     m_log.Warn("[AVFACTORY]: UUID.Zero Wearables, passing fake values.");
                                     resetwearable = true;
@@ -711,7 +711,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                                 case WearableType.Shape:
                                 case WearableType.Skin:
                                 //case WearableType.Underpants:
-                                    TryAndRepair((WearableType)i, invService, userID, appearance);
+                                    TryAndRepairBrokenWearable((WearableType)i, invService, userID, appearance);
                             
                                     m_log.WarnFormat("[AVFACTORY]: {0} Default Wearables, passing existing values.", (WearableType)i);
                                     resetwearable = true;
@@ -727,6 +727,17 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                         if (baseItem != null)
                         {
                             appearance.Wearables[i].Add(appearance.Wearables[i][j].ItemID, baseItem.AssetID);
+                            int unmodifiedWearableIndexForClosure = i;
+                            m_scene.AssetService.Get(baseItem.AssetID.ToString(), this,
+                                                                      delegate(string x, object y, AssetBase z)
+                                                                      {
+                                                                          if (z == null)
+                                                                          {
+                                                                              TryAndRepairBrokenWearable(
+                                                                                  (WearableType)unmodifiedWearableIndexForClosure, invService,
+                                                                                  userID, appearance);
+                                                                          }
+                                                                      });
                         }
                         else
                         {
@@ -734,7 +745,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                                 "[AVFACTORY]: Can't find inventory item {0} for {1}, setting to default",
                                 appearance.Wearables[i][j].ItemID, (WearableType)i);
 
-                            TryAndRepair((WearableType)i, invService, userID, appearance);
+                            TryAndRepairBrokenWearable((WearableType)i, invService, userID, appearance);
                             resetwearable = true;
                             
                         }
@@ -746,7 +757,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                 {
                     m_log.WarnFormat("[AVFACTORY]: {0} Eyes are Null, passing existing values.", (WearableType.Eyes));
                     
-                    TryAndRepair(WearableType.Eyes, invService, userID, appearance);
+                    TryAndRepairBrokenWearable(WearableType.Eyes, invService, userID, appearance);
                     resetwearable = true;
                 }
                 else
@@ -756,7 +767,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                         m_log.WarnFormat("[AVFACTORY]: Eyes are UUID.Zero are broken, {0} {1}",
                                          appearance.Wearables[(int) WearableType.Eyes][0].ItemID,
                                          appearance.Wearables[(int) WearableType.Eyes][0].AssetID);
-                        TryAndRepair(WearableType.Eyes, invService, userID, appearance);
+                        TryAndRepairBrokenWearable(WearableType.Eyes, invService, userID, appearance);
                         resetwearable = true;
 
                     }
@@ -767,7 +778,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                 {
                     m_log.WarnFormat("[AVFACTORY]: {0} shape is Null, passing existing values.", (WearableType.Shape));
 
-                    TryAndRepair(WearableType.Shape, invService, userID, appearance);
+                    TryAndRepairBrokenWearable(WearableType.Shape, invService, userID, appearance);
                     resetwearable = true;
                 }
                 else
@@ -777,7 +788,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                         m_log.WarnFormat("[AVFACTORY]: Shape is UUID.Zero and broken, {0} {1}",
                                          appearance.Wearables[(int)WearableType.Shape][0].ItemID,
                                          appearance.Wearables[(int)WearableType.Shape][0].AssetID);
-                        TryAndRepair(WearableType.Shape, invService, userID, appearance);
+                        TryAndRepairBrokenWearable(WearableType.Shape, invService, userID, appearance);
                         resetwearable = true;
 
                     }
@@ -788,7 +799,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                 {
                     m_log.WarnFormat("[AVFACTORY]: {0} Hair is Null, passing existing values.", (WearableType.Hair));
 
-                    TryAndRepair(WearableType.Hair, invService, userID, appearance);
+                    TryAndRepairBrokenWearable(WearableType.Hair, invService, userID, appearance);
                     resetwearable = true;
                 }
                 else
@@ -798,7 +809,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                         m_log.WarnFormat("[AVFACTORY]: Hair is UUID.Zero and broken, {0} {1}",
                                          appearance.Wearables[(int)WearableType.Hair][0].ItemID,
                                          appearance.Wearables[(int)WearableType.Hair][0].AssetID);
-                        TryAndRepair(WearableType.Hair, invService, userID, appearance);
+                        TryAndRepairBrokenWearable(WearableType.Hair, invService, userID, appearance);
                         resetwearable = true;
 
                     }
@@ -809,7 +820,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                 {
                     m_log.WarnFormat("[AVFACTORY]: {0} Skin is Null, passing existing values.", (WearableType.Skin));
 
-                    TryAndRepair(WearableType.Skin, invService, userID, appearance);
+                    TryAndRepairBrokenWearable(WearableType.Skin, invService, userID, appearance);
                     resetwearable = true;
                 }
                 else
@@ -819,7 +830,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                         m_log.WarnFormat("[AVFACTORY]: Skin is UUID.Zero and broken, {0} {1}",
                                          appearance.Wearables[(int)WearableType.Skin][0].ItemID,
                                          appearance.Wearables[(int)WearableType.Skin][0].AssetID);
-                        TryAndRepair(WearableType.Skin, invService, userID, appearance);
+                        TryAndRepairBrokenWearable(WearableType.Skin, invService, userID, appearance);
                         resetwearable = true;
 
                     }
@@ -841,7 +852,7 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
                 m_log.WarnFormat("[AVFACTORY]: user {0} has no inventory, appearance isn't going to work", userID);
             }
         }
-        private void TryAndRepair(WearableType type, IInventoryService invService, UUID userID,AvatarAppearance appearance)
+        private void TryAndRepairBrokenWearable(WearableType type, IInventoryService invService, UUID userID,AvatarAppearance appearance)
         {
             UUID defaultwearable = GetDefaultItem(type);
             if (defaultwearable != UUID.Zero)
-- 
cgit v1.1