diff options
author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2013-06-27 11:43:06 -0400 |
---|---|---|
committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2013-06-27 11:43:06 -0400 |
commit | 4c75140008527ac9e5260978f4a256d84711644b (patch) | |
tree | cec4b50583f0a353a133e3b687a4bdefe5b2919e /indra | |
parent | 5be12cf0be170c5d886694db11605d197e418190 (diff) |
SH-4300 WIP - added order validation
Diffstat (limited to 'indra')
-rwxr-xr-x | indra/newview/llappearancemgr.cpp | 38 | ||||
-rwxr-xr-x | indra/newview/llappearancemgr.h | 2 |
2 files changed, 36 insertions, 4 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 5322646629..98909c258a 100755 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -1821,7 +1821,8 @@ void LLAppearanceMgr::updateCOF(const LLUUID& category, bool append) getWearableOrderingDescUpdates(wear_items, desc_map); // Will link all the above items. - LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy; + // link_waiter enforce flags are false because we've already fixed everything up in updateCOF(). + LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy(false,false); LLSD contents = LLSD::emptyArray(); for (LLInventoryModel::item_array_t::const_iterator it = all_items.begin(); @@ -2070,6 +2071,8 @@ void LLAppearanceMgr::updateAppearanceFromCOF(bool enforce_item_restrictions, return; } + llassert(validateClothingOrderingInfo()); + BoolSetter setIsInUpdateAppearanceFromCOF(mIsInUpdateAppearanceFromCOF); selfStartPhase("update_appearance_from_cof"); @@ -2975,13 +2978,40 @@ void LLAppearanceMgr::getWearableOrderingDescUpdates(LLInventoryModel::item_arra std::string new_order_str = build_order_string((LLWearableType::EType)type, i); if (new_order_str == item->getActualDescription()) continue; - LL_DEBUGS("Avatar") << item->getName() << " need to update desc to: " << new_order_str - << " (from: " << item->getActualDescription() << ")" << llendl; - desc_map[item->getUUID()] = new_order_str; } } } + +bool LLAppearanceMgr::validateClothingOrderingInfo(LLUUID cat_id) +{ + // COF is processed if cat_id is not specified + if (cat_id.isNull()) + { + cat_id = getCOF(); + } + + LLInventoryModel::item_array_t wear_items; + getDescendentsOfAssetType(cat_id, wear_items, LLAssetType::AT_CLOTHING); + + // Identify items for which desc needs to change. + desc_map_t desc_map; + getWearableOrderingDescUpdates(wear_items, desc_map); + + for (desc_map_t::const_iterator it = desc_map.begin(); + it != desc_map.end(); ++it) + { + const LLUUID& item_id = it->first; + const std::string& new_order_str = it->second; + LLViewerInventoryItem *item = gInventory.getItem(item_id); + llwarns << "Order validation fails: " << item->getName() + << " needs to update desc to: " << new_order_str + << " (from: " << item->getActualDescription() << ")" << llendl; + } + + return desc_map.size() == 0; +} + void LLAppearanceMgr::updateClothingOrderingInfo(LLUUID cat_id, LLPointer<LLInventoryCallback> cb) { diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 3293212719..84a0afbb40 100755 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -208,6 +208,8 @@ public: //Check ordering information on wearables stored in links' descriptions and update if it is invalid // COF is processed if cat_id is not specified + bool validateClothingOrderingInfo(LLUUID cat_id = LLUUID::null); + void updateClothingOrderingInfo(LLUUID cat_id = LLUUID::null, LLPointer<LLInventoryCallback> cb = NULL); |