diff options
author | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-07-19 17:15:32 -0400 |
---|---|---|
committer | Brad Payne (Vir Linden) <vir@lindenlab.com> | 2010-07-19 17:15:32 -0400 |
commit | 1dae91d7354aef57625e3508b23a4bb21de242e8 (patch) | |
tree | 6759f56f1a65b00a92522550c0ef30c09c147f08 /indra/newview/lloutfitobserver.cpp | |
parent | d4845c1d263c07aaa0b8c2c638cd2a214e166bdd (diff) |
EXT-8360 WIP - propagating COF item name changes various places
Diffstat (limited to 'indra/newview/lloutfitobserver.cpp')
-rw-r--r-- | indra/newview/lloutfitobserver.cpp | 42 |
1 files changed, 38 insertions, 4 deletions
diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp index 03414b9964..99835edad2 100644 --- a/indra/newview/lloutfitobserver.cpp +++ b/indra/newview/lloutfitobserver.cpp @@ -40,6 +40,7 @@ LLOutfitObserver::LLOutfitObserver() : mCOFLastVersion(LLViewerInventoryCategory::VERSION_UNKNOWN) { + mItemNameHash.finalize(); gInventory.addObserver(this); } @@ -87,13 +88,25 @@ bool LLOutfitObserver::checkCOF() if (cof.isNull()) return false; + bool cof_changed = false; + LLMD5 itemNameHash; + hashItemNames(itemNameHash); + if (itemNameHash != mItemNameHash) + { + cof_changed = true; + mItemNameHash = itemNameHash; + } + S32 cof_version = getCategoryVersion(cof); + if (cof_version != mCOFLastVersion) + { + cof_changed = true; + mCOFLastVersion = cof_version; + } - if (cof_version == mCOFLastVersion) + if (!cof_changed) return false; - - mCOFLastVersion = cof_version; - + // dirtiness state should be updated before sending signal LLAppearanceMgr::getInstance()->updateIsDirty(); mCOFChanged(); @@ -101,6 +114,27 @@ bool LLOutfitObserver::checkCOF() return true; } +void LLOutfitObserver::hashItemNames(LLMD5& itemNameHash) +{ + LLInventoryModel::cat_array_t cat_array; + LLInventoryModel::item_array_t item_array; + gInventory.collectDescendents(LLAppearanceMgr::instance().getCOF(), + cat_array, + item_array, + false); + for (LLInventoryModel::item_array_t::const_iterator iter = item_array.begin(); + iter != item_array.end(); + iter++) + { + const LLViewerInventoryItem *item = (*iter); + if (!item) + continue; + const std::string& name = item->getName(); + itemNameHash.update(name); + } + itemNameHash.finalize(); +} + void LLOutfitObserver::checkBaseOutfit() { LLUUID baseoutfit_id = |