summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaul_productengine <none@none>2011-02-18 15:28:38 +0200
committerpaul_productengine <none@none>2011-02-18 15:28:38 +0200
commit23717a09183351d08306d04589a25a1b8643cdf1 (patch)
tree5c81d096167bb6012af320e1e11a32a214edc5d8
parent1a79aeca54db6ee5bf1fb2968c2642f8a3306091 (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.
-rw-r--r--indra/newview/llmutelist.cpp25
-rw-r--r--indra/newview/llviewermenu.cpp2
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);
}