diff options
author | paul_productengine <none@none> | 2011-02-18 15:28:38 +0200 |
---|---|---|
committer | paul_productengine <none@none> | 2011-02-18 15:28:38 +0200 |
commit | 23717a09183351d08306d04589a25a1b8643cdf1 (patch) | |
tree | 5c81d096167bb6012af320e1e11a32a214edc5d8 /indra/newview | |
parent | 1a79aeca54db6ee5bf1fb2968c2642f8a3306091 (diff) |
BUG STORM-1004 FIXED Unblocking/blocking name sometimes deletes identically named entry, but of different TYPE
LLMuteList stores muted objects in two sets: set of names and set of ids. Avatar objects are stored by ids (set of ids), other objects can be stored both by name(set of names) or ids
- Delete items from corresponding set (from set of names or ids), not form both sets at time.
- Improved isMuted method's logic. Now if avatar is tested whether it's muted or not, don't search its name in the set of names.
Diffstat (limited to 'indra/newview')
-rw-r--r-- | indra/newview/llmutelist.cpp | 25 | ||||
-rw-r--r-- | indra/newview/llviewermenu.cpp | 2 |
2 files changed, 15 insertions, 12 deletions
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp index af8fdb17cf..a7059eb519 100644 --- a/indra/newview/llmutelist.cpp +++ b/indra/newview/llmutelist.cpp @@ -373,17 +373,19 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags) // Must be after erase. setLoaded(); // why is this here? -MG } - - // Clean up any legacy mutes - string_set_t::iterator legacy_it = mLegacyMutes.find(mute.mName); - if (legacy_it != mLegacyMutes.end()) + else { - // Database representation of legacy mute is UUID null. - LLMute mute(LLUUID::null, *legacy_it, LLMute::BY_NAME); - updateRemove(mute); - mLegacyMutes.erase(legacy_it); - // Must be after erase. - setLoaded(); // why is this here? -MG + // Clean up any legacy mutes + string_set_t::iterator legacy_it = mLegacyMutes.find(mute.mName); + if (legacy_it != mLegacyMutes.end()) + { + // Database representation of legacy mute is UUID null. + LLMute mute(LLUUID::null, *legacy_it, LLMute::BY_NAME); + updateRemove(mute); + mLegacyMutes.erase(legacy_it); + // Must be after erase. + setLoaded(); // why is this here? -MG + } } return found; @@ -607,7 +609,8 @@ BOOL LLMuteList::isMuted(const LLUUID& id, const std::string& name, U32 flags) c } // empty names can't be legacy-muted - if (name.empty()) return FALSE; + bool avatar = mute_object && mute_object->isAvatar(); + if (name.empty() || avatar) return FALSE; // Look in legacy pile string_set_t::const_iterator legacy_it = mLegacyMutes.find(name); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 7cc04e0338..ba5816e095 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -2835,7 +2835,7 @@ class LLObjectMute : public view_listener_t } LLMute mute(id, name, type); - if (LLMuteList::getInstance()->isMuted(mute.mID, mute.mName)) + if (LLMuteList::getInstance()->isMuted(mute.mID)) { LLMuteList::getInstance()->remove(mute); } |