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 | |
| 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.
| -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);  		} | 
