summaryrefslogtreecommitdiff
path: root/indra/newview/llmutelist.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llmutelist.cpp')
-rwxr-xr-x[-rw-r--r--]indra/newview/llmutelist.cpp95
1 files changed, 70 insertions, 25 deletions
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
index af8fdb17cf..65ac11092c 100644..100755
--- a/indra/newview/llmutelist.cpp
+++ b/indra/newview/llmutelist.cpp
@@ -44,6 +44,8 @@
#include "llmutelist.h"
+#include "pipeline.h"
+
#include <boost/tokenizer.hpp>
#include "lldispatcher.h"
@@ -192,6 +194,23 @@ BOOL LLMuteList::isLinden(const std::string& name) const
return last_name == "Linden";
}
+static LLVOAvatar* find_avatar(const LLUUID& id)
+{
+ LLViewerObject *obj = gObjectList.findObject(id);
+ while (obj && obj->isAttachment())
+ {
+ obj = (LLViewerObject *)obj->getParent();
+ }
+
+ if (obj && obj->isAvatar())
+ {
+ return (LLVOAvatar*)obj;
+ }
+ else
+ {
+ return NULL;
+ }
+}
BOOL LLMuteList::add(const LLMute& mute, U32 flags)
{
@@ -215,23 +234,24 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
// Can't mute empty string by name
if (mute.mName.empty())
{
- llwarns << "Trying to mute empty string by-name" << llendl;
+ LL_WARNS() << "Trying to mute empty string by-name" << LL_ENDL;
return FALSE;
}
// Null mutes must have uuid null
if (mute.mID.notNull())
{
- llwarns << "Trying to add by-name mute with non-null id" << llendl;
+ LL_WARNS() << "Trying to add by-name mute with non-null id" << LL_ENDL;
return FALSE;
}
std::pair<string_set_t::iterator, bool> result = mLegacyMutes.insert(mute.mName);
if (result.second)
{
- llinfos << "Muting by name " << mute.mName << llendl;
+ LL_INFOS() << "Muting by name " << mute.mName << LL_ENDL;
updateAdd(mute);
notifyObservers();
+ notifyObserversDetailed(mute);
return TRUE;
}
else
@@ -277,9 +297,10 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
std::pair<mute_set_t::iterator, bool> result = mMutes.insert(localmute);
if (result.second)
{
- llinfos << "Muting " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << llendl;
+ LL_INFOS() << "Muting " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << LL_ENDL;
updateAdd(localmute);
notifyObservers();
+ notifyObserversDetailed(localmute);
if(!(localmute.mFlags & LLMute::flagParticles))
{
//Kill all particle systems owned by muted task
@@ -288,6 +309,12 @@ BOOL LLMuteList::add(const LLMute& mute, U32 flags)
LLViewerPartSim::getInstance()->clearParticlesByOwnerID(localmute.mID);
}
}
+ //mute local lights that are attached to the avatar
+ LLVOAvatar *avatarp = find_avatar(localmute.mID);
+ if (avatarp)
+ {
+ LLPipeline::removeMutedAVsLights(avatarp);
+ }
return TRUE;
}
}
@@ -360,30 +387,34 @@ BOOL LLMuteList::remove(const LLMute& mute, U32 flags)
{
// The entry was actually removed. Notify the server.
updateRemove(localmute);
- llinfos << "Unmuting " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << llendl;
+ LL_INFOS() << "Unmuting " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << LL_ENDL;
}
else
{
// Flags were updated, the mute entry needs to be retransmitted to the server and re-added to the list.
mMutes.insert(localmute);
updateAdd(localmute);
- llinfos << "Updating mute entry " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << llendl;
+ LL_INFOS() << "Updating mute entry " << localmute.mName << " id " << localmute.mID << " flags " << localmute.mFlags << LL_ENDL;
}
// Must be after erase.
+ notifyObserversDetailed(localmute);
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.
+ notifyObserversDetailed(mute);
+ setLoaded(); // why is this here? -MG
+ }
}
return found;
@@ -500,14 +531,14 @@ BOOL LLMuteList::loadFromFile(const std::string& filename)
{
if(!filename.size())
{
- llwarns << "Mute List Filename is Empty!" << llendl;
+ LL_WARNS() << "Mute List Filename is Empty!" << LL_ENDL;
return FALSE;
}
LLFILE* fp = LLFile::fopen(filename, "rb"); /*Flawfinder: ignore*/
if (!fp)
{
- llwarns << "Couldn't open mute list " << filename << llendl;
+ LL_WARNS() << "Couldn't open mute list " << filename << LL_ENDL;
return FALSE;
}
@@ -550,14 +581,14 @@ BOOL LLMuteList::saveToFile(const std::string& filename)
{
if(!filename.size())
{
- llwarns << "Mute List Filename is Empty!" << llendl;
+ LL_WARNS() << "Mute List Filename is Empty!" << LL_ENDL;
return FALSE;
}
LLFILE* fp = LLFile::fopen(filename, "wb"); /*Flawfinder: ignore*/
if (!fp)
{
- llwarns << "Couldn't open mute list " << filename << llendl;
+ LL_WARNS() << "Couldn't open mute list " << filename << LL_ENDL;
return FALSE;
}
// legacy mutes have null uuid
@@ -607,7 +638,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);
@@ -659,12 +691,12 @@ void LLMuteList::cache(const LLUUID& agent_id)
void LLMuteList::processMuteListUpdate(LLMessageSystem* msg, void**)
{
- llinfos << "LLMuteList::processMuteListUpdate()" << llendl;
+ LL_INFOS() << "LLMuteList::processMuteListUpdate()" << LL_ENDL;
LLUUID agent_id;
msg->getUUIDFast(_PREHASH_MuteData, _PREHASH_AgentID, agent_id);
if(agent_id != gAgent.getID())
{
- llwarns << "Got an mute list update for the wrong agent." << llendl;
+ LL_WARNS() << "Got an mute list update for the wrong agent." << LL_ENDL;
return;
}
std::string unclean_filename;
@@ -684,7 +716,7 @@ void LLMuteList::processMuteListUpdate(LLMessageSystem* msg, void**)
void LLMuteList::processUseCachedMuteList(LLMessageSystem* msg, void**)
{
- llinfos << "LLMuteList::processUseCachedMuteList()" << llendl;
+ LL_INFOS() << "LLMuteList::processUseCachedMuteList()" << LL_ENDL;
std::string agent_id_string;
gAgent.getID().toString(agent_id_string);
@@ -695,7 +727,7 @@ void LLMuteList::processUseCachedMuteList(LLMessageSystem* msg, void**)
void LLMuteList::onFileMuteList(void** user_data, S32 error_code, LLExtStat ext_status)
{
- llinfos << "LLMuteList::processMuteListFile()" << llendl;
+ LL_INFOS() << "LLMuteList::processMuteListFile()" << LL_ENDL;
std::string* local_filename_and_path = (std::string*)user_data;
if(local_filename_and_path && !local_filename_and_path->empty() && (error_code == 0))
@@ -734,3 +766,16 @@ void LLMuteList::notifyObservers()
it = mObservers.upper_bound(observer);
}
}
+
+void LLMuteList::notifyObserversDetailed(const LLMute& mute)
+{
+ for (observer_set_t::iterator it = mObservers.begin();
+ it != mObservers.end();
+ )
+ {
+ LLMuteListObserver* observer = *it;
+ observer->onChangeDetailed(mute);
+ // In case onChange() deleted an entry.
+ it = mObservers.upper_bound(observer);
+ }
+}