Skip to content
Snippets Groups Projects
Commit 831fef5a authored by Rye Mutt's avatar Rye Mutt :bread:
Browse files

Apply Ansariel's fix for duplicated names in chat

parent 76e2d515
No related branches found
No related tags found
No related merge requests found
...@@ -517,8 +517,7 @@ LLUrlEntrySimpleSecondlifeURL::LLUrlEntrySimpleSecondlifeURL() ...@@ -517,8 +517,7 @@ LLUrlEntrySimpleSecondlifeURL::LLUrlEntrySimpleSecondlifeURL()
// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about // secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
// x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about // x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/about
// //
LLUrlEntryAgent::LLUrlEntryAgent() : LLUrlEntryAgent::LLUrlEntryAgent()
mAvatarNameCacheConnection()
{ {
mPattern = boost::regex(APP_HEADER_REGEX "/agent/[\\da-f-]+/\\w+", mPattern = boost::regex(APP_HEADER_REGEX "/agent/[\\da-f-]+/\\w+",
boost::regex::perl|boost::regex::icase); boost::regex::perl|boost::regex::icase);
...@@ -549,7 +548,16 @@ void LLUrlEntryAgent::callObservers(const std::string &id, ...@@ -549,7 +548,16 @@ void LLUrlEntryAgent::callObservers(const std::string &id,
void LLUrlEntryAgent::onAvatarNameCache(const LLUUID& id, void LLUrlEntryAgent::onAvatarNameCache(const LLUUID& id,
const LLAvatarName& av_name) const LLAvatarName& av_name)
{ {
mAvatarNameCacheConnection.disconnect(); std::pair<avatar_name_cache_connection_map_t::iterator, avatar_name_cache_connection_map_t::iterator> range;
range = mAvatarNameCacheConnections.equal_range(id);
for (avatar_name_cache_connection_map_t::iterator it = range.first; it != range.second; ++it)
{
if (it->second.connected())
{
it->second.disconnect();
}
}
mAvatarNameCacheConnections.erase(range.first, range.second);
std::string label = av_name.getCompleteName(); std::string label = av_name.getCompleteName();
...@@ -636,11 +644,8 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa ...@@ -636,11 +644,8 @@ std::string LLUrlEntryAgent::getLabel(const std::string &url, const LLUrlLabelCa
} }
else else
{ {
if (mAvatarNameCacheConnection.connected()) boost::signals2::connection connection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgent::onAvatarNameCache, this, _1, _2));
{ mAvatarNameCacheConnections.insert(std::make_pair(agent_id, connection));
mAvatarNameCacheConnection.disconnect();
}
mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgent::onAvatarNameCache, this, _1, _2));
addObserver(agent_id_string, url, cb); addObserver(agent_id_string, url, cb);
return LLTrans::getString("LoadingData"); return LLTrans::getString("LoadingData");
} }
...@@ -701,14 +706,22 @@ std::string LLUrlEntryAgent::getIcon(const std::string &url) ...@@ -701,14 +706,22 @@ std::string LLUrlEntryAgent::getIcon(const std::string &url)
// secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username) // secondlife:///app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username)
// x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username) // x-grid-location-info://lincoln.lindenlab.com/app/agent/0e346d8b-4433-4d66-a6b0-fd37083abc4c/(completename|displayname|username)
// //
LLUrlEntryAgentName::LLUrlEntryAgentName() : LLUrlEntryAgentName::LLUrlEntryAgentName()
mAvatarNameCacheConnection()
{} {}
void LLUrlEntryAgentName::onAvatarNameCache(const LLUUID& id, void LLUrlEntryAgentName::onAvatarNameCache(const LLUUID& id,
const LLAvatarName& av_name) const LLAvatarName& av_name)
{ {
mAvatarNameCacheConnection.disconnect(); std::pair<avatar_name_cache_connection_map_t::iterator, avatar_name_cache_connection_map_t::iterator> range;
range = mAvatarNameCacheConnections.equal_range(id);
for (avatar_name_cache_connection_map_t::iterator it = range.first; it != range.second; ++it)
{
if (it->second.connected())
{
it->second.disconnect();
}
}
mAvatarNameCacheConnections.erase(range.first, range.second);
std::string label = getName(av_name); std::string label = getName(av_name);
// received the agent name from the server - tell our observers // received the agent name from the server - tell our observers
...@@ -743,11 +756,8 @@ std::string LLUrlEntryAgentName::getLabel(const std::string &url, const LLUrlLab ...@@ -743,11 +756,8 @@ std::string LLUrlEntryAgentName::getLabel(const std::string &url, const LLUrlLab
} }
else else
{ {
if (mAvatarNameCacheConnection.connected()) boost::signals2::connection connection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgentName::onAvatarNameCache, this, _1, _2));
{ mAvatarNameCacheConnections.insert(std::make_pair(agent_id, connection));
mAvatarNameCacheConnection.disconnect();
}
mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id, boost::bind(&LLUrlEntryAgentName::onAvatarNameCache, this, _1, _2));
addObserver(agent_id_string, url, cb); addObserver(agent_id_string, url, cb);
return LLTrans::getString("LoadingData"); return LLTrans::getString("LoadingData");
} }
......
...@@ -212,10 +212,15 @@ class LLUrlEntryAgent : public LLUrlEntryBase ...@@ -212,10 +212,15 @@ class LLUrlEntryAgent : public LLUrlEntryBase
LLUrlEntryAgent(); LLUrlEntryAgent();
~LLUrlEntryAgent() ~LLUrlEntryAgent()
{ {
if (mAvatarNameCacheConnection.connected()) for (avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.begin(); it != mAvatarNameCacheConnections.end(); ++it)
{ {
mAvatarNameCacheConnection.disconnect(); if (it->second.connected())
{
it->second.disconnect();
}
} }
mAvatarNameCacheConnections.clear();
} }
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ std::string getIcon(const std::string &url); /*virtual*/ std::string getIcon(const std::string &url);
...@@ -227,7 +232,8 @@ class LLUrlEntryAgent : public LLUrlEntryBase ...@@ -227,7 +232,8 @@ class LLUrlEntryAgent : public LLUrlEntryBase
/*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon); /*virtual*/ void callObservers(const std::string &id, const std::string &label, const std::string& icon);
private: private:
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name); void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
boost::signals2::connection mAvatarNameCacheConnection; typedef std::multimap<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
}; };
/// ///
...@@ -241,10 +247,14 @@ class LLUrlEntryAgentName : public LLUrlEntryBase, public boost::signals2::track ...@@ -241,10 +247,14 @@ class LLUrlEntryAgentName : public LLUrlEntryBase, public boost::signals2::track
LLUrlEntryAgentName(); LLUrlEntryAgentName();
~LLUrlEntryAgentName() ~LLUrlEntryAgentName()
{ {
if (mAvatarNameCacheConnection.connected()) for (avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.begin(); it != mAvatarNameCacheConnections.end(); ++it)
{ {
mAvatarNameCacheConnection.disconnect(); if (it->second.connected())
{
it->second.disconnect();
}
} }
mAvatarNameCacheConnections.clear();
} }
/*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb); /*virtual*/ std::string getLabel(const std::string &url, const LLUrlLabelCallback &cb);
/*virtual*/ LLStyle::Params getStyle() const; /*virtual*/ LLStyle::Params getStyle() const;
...@@ -253,7 +263,8 @@ class LLUrlEntryAgentName : public LLUrlEntryBase, public boost::signals2::track ...@@ -253,7 +263,8 @@ class LLUrlEntryAgentName : public LLUrlEntryBase, public boost::signals2::track
virtual std::string getName(const LLAvatarName& avatar_name) = 0; virtual std::string getName(const LLAvatarName& avatar_name) = 0;
private: private:
void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name); void onAvatarNameCache(const LLUUID& id, const LLAvatarName& av_name);
boost::signals2::connection mAvatarNameCacheConnection; typedef std::multimap<LLUUID, boost::signals2::connection> avatar_name_cache_connection_map_t;
avatar_name_cache_connection_map_t mAvatarNameCacheConnections;
}; };
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment