diff --git a/indra/newview/NACLfloaterexploresounds.cpp b/indra/newview/NACLfloaterexploresounds.cpp index cfd2ba644e..cfcdd1a78c 100644 --- a/indra/newview/NACLfloaterexploresounds.cpp +++ b/indra/newview/NACLfloaterexploresounds.cpp @@ -451,22 +451,22 @@ void NACLFloaterExploreSounds::blacklistSound(FSAssetBlacklist::eBlacklistFlag f region_name = cur_region->getName(); } - if (auto found = mBlacklistAvatarNameCacheConnections.find(item.mOwnerID); found != mBlacklistAvatarNameCacheConnections.end()) + if (LLAvatarName av_name; LLAvatarNameCache::get(item.mOwnerID, &av_name)) { - if (found->second.connected()) - { - found->second.disconnect(); - } - mBlacklistAvatarNameCacheConnections.erase(found); + FSAssetBlacklist::getInstance()->addNewItemToBlacklist(item.mAssetID, av_name.getCompleteName(), region_name, LLAssetType::AT_SOUND, flag); + } + else + { + // Create unique UUID here instead of avatar UUID because we might be blacklisting more than one sound of the same user + LLUUID requestId = LLUUID::generateNewID(); + mBlacklistAvatarNameCacheConnections.try_emplace(requestId, LLAvatarNameCache::get(item.mOwnerID, boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback, this, requestId, _1, _2, item.mAssetID, region_name, flag))); } - LLAvatarNameCache::callback_connection_t cb = LLAvatarNameCache::get(item.mOwnerID, boost::bind(&NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback, this, _1, _2, item.mAssetID, region_name, flag)); - mBlacklistAvatarNameCacheConnections.insert(std::make_pair(item.mOwnerID, cb)); } } -void NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name, FSAssetBlacklist::eBlacklistFlag flag) +void NACLFloaterExploreSounds::onBlacklistAvatarNameCacheCallback(const LLUUID& request_id, const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name, FSAssetBlacklist::eBlacklistFlag flag) { - if (auto found = mBlacklistAvatarNameCacheConnections.find(av_id); found != mBlacklistAvatarNameCacheConnections.end()) + if (auto found = mBlacklistAvatarNameCacheConnections.find(request_id); found != mBlacklistAvatarNameCacheConnections.end()) { if (found->second.connected()) { diff --git a/indra/newview/NACLfloaterexploresounds.h b/indra/newview/NACLfloaterexploresounds.h index ff2a36d453..bab842a742 100644 --- a/indra/newview/NACLfloaterexploresounds.h +++ b/indra/newview/NACLfloaterexploresounds.h @@ -48,7 +48,7 @@ private: typedef std::map blacklist_avatar_name_cache_connection_map_t; blacklist_avatar_name_cache_connection_map_t mBlacklistAvatarNameCacheConnections; - void onBlacklistAvatarNameCacheCallback(const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name, FSAssetBlacklist::eBlacklistFlag flag); + void onBlacklistAvatarNameCacheCallback(const LLUUID& request_id, const LLUUID& av_id, const LLAvatarName& av_name, const LLUUID& asset_id, const std::string& region_name, FSAssetBlacklist::eBlacklistFlag flag); }; #endif diff --git a/indra/newview/fsdata.cpp b/indra/newview/fsdata.cpp index 8adb3a6adc..b31182ed4e 100644 --- a/indra/newview/fsdata.cpp +++ b/indra/newview/fsdata.cpp @@ -881,23 +881,27 @@ void FSData::addAgents() return; } - for (std::map::iterator iter = mTeamAgents.begin(); iter != mTeamAgents.end(); ++iter) + for (const auto& [id, flags] : mTeamAgents) { - if (iter->second & NO_SPAM) + if (flags & NO_SPAM) { - LLUUID id = iter->first; - avatar_name_cache_connection_map_t::iterator it = mAvatarNameCacheConnections.find(id); - if (it != mAvatarNameCacheConnections.end()) + if (LLAvatarName av_name; LLAvatarNameCache::get(id, &av_name)) { - if (it->second.connected()) - { - it->second.disconnect(); - } - mAvatarNameCacheConnections.erase(it); + onNameCache(id, av_name); } + else + { + if (auto it = mAvatarNameCacheConnections.find(id); it != mAvatarNameCacheConnections.end()) + { + if (it->second.connected()) + { + it->second.disconnect(); + } + mAvatarNameCacheConnections.erase(it); + } - LLAvatarNameCache::callback_connection_t cb = LLAvatarNameCache::get(id, boost::bind(&FSData::onNameCache, this, _1, _2)); - mAvatarNameCacheConnections.insert(std::make_pair(id, cb)); + mAvatarNameCacheConnections.try_emplace(id, LLAvatarNameCache::get(id, boost::bind(&FSData::onNameCache, this, _1, _2))); + } } } } diff --git a/indra/newview/fsfloatercontacts.cpp b/indra/newview/fsfloatercontacts.cpp index 2bf2f924fc..41ff0c8593 100644 --- a/indra/newview/fsfloatercontacts.cpp +++ b/indra/newview/fsfloatercontacts.cpp @@ -648,8 +648,7 @@ void FSFloaterContacts::addFriend(const LLUUID& agent_id) { const LLRelationship* info = at.getBuddyInfo(agent_id); LLUUID request_id = LLUUID::generateNewID(); - LLAvatarNameCache::callback_connection_t conn = LLAvatarNameCache::get(agent_id, boost::bind(&FSFloaterContacts::updateFriendItem, this, agent_id, info, request_id)); - mAvatarNameCacheConnections[request_id] = conn; + mAvatarNameCacheConnections.try_emplace(request_id, LLAvatarNameCache::get(agent_id, boost::bind(&FSFloaterContacts::updateFriendItem, this, agent_id, info, request_id))); } LLSD element; @@ -742,8 +741,7 @@ void FSFloaterContacts::updateFriendItem(const LLUUID& agent_id, const LLRelatio if (!LLAvatarNameCache::get(agent_id, &av_name)) { LLUUID request_id = LLUUID::generateNewID(); - LLAvatarNameCache::callback_connection_t conn = LLAvatarNameCache::get(agent_id, boost::bind(&FSFloaterContacts::updateFriendItem, this, agent_id, info, request_id)); - mAvatarNameCacheConnections[request_id] = conn; + mAvatarNameCacheConnections.try_emplace(request_id, LLAvatarNameCache::get(agent_id, boost::bind(&FSFloaterContacts::updateFriendItem, this, agent_id, info, request_id))); } // Name of the status icon to use @@ -1250,21 +1248,19 @@ void FSFloaterContacts::onColumnDisplayModeChanged(const std::string& settings_n void FSFloaterContacts::onDisplayNameChanged() { - listitem_vec_t items = mFriendsList->getAllData(); - for (listitem_vec_t::iterator it = items.begin(); it != items.end(); ++it) + for (auto item : mFriendsList->getAllData()) { LLAvatarName av_name; - if (LLAvatarNameCache::get((*it)->getUUID(), &av_name)) + if (LLAvatarNameCache::get(item->getUUID(), &av_name)) { - (*it)->getColumn(LIST_FRIEND_USER_NAME)->setValue(av_name.getUserNameForDisplay()); - (*it)->getColumn(LIST_FRIEND_DISPLAY_NAME)->setValue(av_name.getDisplayName()); - (*it)->getColumn(LIST_FRIEND_NAME)->setValue(getFullName(av_name)); + item->getColumn(LIST_FRIEND_USER_NAME)->setValue(av_name.getUserNameForDisplay()); + item->getColumn(LIST_FRIEND_DISPLAY_NAME)->setValue(av_name.getDisplayName()); + item->getColumn(LIST_FRIEND_NAME)->setValue(getFullName(av_name)); } else { LLUUID request_id = LLUUID::generateNewID(); - LLAvatarNameCache::callback_connection_t conn = LLAvatarNameCache::get((*it)->getUUID(), boost::bind(&FSFloaterContacts::setDirtyNames, this, request_id)); - mAvatarNameCacheConnections[request_id] = conn; + mAvatarNameCacheConnections.try_emplace(request_id, LLAvatarNameCache::get(item->getUUID(), boost::bind(&FSFloaterContacts::setDirtyNames, this, request_id))); } } mFriendsList->setNeedsSort(); diff --git a/indra/newview/lggcontactsets.cpp b/indra/newview/lggcontactsets.cpp index df5cbb8aa9..479f4e02b9 100644 --- a/indra/newview/lggcontactsets.cpp +++ b/indra/newview/lggcontactsets.cpp @@ -767,15 +767,23 @@ void LGGContactSets::setPseudonym(const LLUUID& friend_id, std::string_view pseu inst->fetch(friend_id); LLVOAvatar::invalidateNameTag(friend_id); - if (auto it = mAvatarNameCacheConnections.find(friend_id); it != mAvatarNameCacheConnections.end()) + if (LLAvatarName av_name; LLAvatarNameCache::get(friend_id, &av_name)) { - if (it->second.connected()) - { - it->second.disconnect(); - } - mAvatarNameCacheConnections.erase(it); + mChangedSignal(UPDATED_MEMBERS); + } + else + { + if (auto it = mAvatarNameCacheConnections.find(friend_id); it != mAvatarNameCacheConnections.end()) + { + if (it->second.connected()) + { + it->second.disconnect(); + } + mAvatarNameCacheConnections.erase(it); + } + + mAvatarNameCacheConnections.try_emplace(friend_id, LLAvatarNameCache::get(friend_id, boost::bind(&LGGContactSets::onAvatarNameCache, this, _1))); } - mAvatarNameCacheConnections[friend_id] = LLAvatarNameCache::get(friend_id, boost::bind(&LGGContactSets::onAvatarNameCache, this, _1)); saveToDisk(); } @@ -802,15 +810,24 @@ void LGGContactSets::clearPseudonym(const LLUUID& friend_id, bool save_changes / removeNonFriendFromList(friend_id, save_changes); } - if (auto it = mAvatarNameCacheConnections.find(friend_id); it != mAvatarNameCacheConnections.end()) + if (LLAvatarName av_name; LLAvatarNameCache::get(friend_id, &av_name)) { - if (it->second.connected()) - { - it->second.disconnect(); - } - mAvatarNameCacheConnections.erase(it); + mChangedSignal(UPDATED_MEMBERS); } - mAvatarNameCacheConnections[friend_id] = LLAvatarNameCache::get(friend_id, boost::bind(&LGGContactSets::onAvatarNameCache, this, _1)); + else + { + if (auto it = mAvatarNameCacheConnections.find(friend_id); it != mAvatarNameCacheConnections.end()) + { + if (it->second.connected()) + { + it->second.disconnect(); + } + mAvatarNameCacheConnections.erase(it); + } + + mAvatarNameCacheConnections.try_emplace(friend_id, LLAvatarNameCache::get(friend_id, boost::bind(&LGGContactSets::onAvatarNameCache, this, _1))); + } + if (save_changes) { saveToDisk(); diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp index 3de843627f..09f7ec42a6 100644 --- a/indra/newview/llnetmap.cpp +++ b/indra/newview/llnetmap.cpp @@ -1761,7 +1761,8 @@ bool LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask) LLMenuItemCallGL::Params p; p.name = llformat("Profile Item %d", itAgent - mClosestAgentsToCursor.begin()); - LLAvatarName avName; const LLUUID& idAgent = *itAgent; + LLAvatarName avName; + const LLUUID& idAgent = *itAgent; if (LLAvatarNameCache::get(idAgent, &avName)) { p.label = avName.getCompleteName(); @@ -1778,7 +1779,7 @@ bool LLNetMap::handleRightMouseDown(S32 x, S32 y, MASK mask) } mAvatarNameCacheConnections.erase(it); } - mAvatarNameCacheConnections[idAgent] = LLAvatarNameCache::get(idAgent, boost::bind(&LLNetMap::setAvatarProfileLabel, this, _1, _2, p.name.getValue())); + mAvatarNameCacheConnections.try_emplace(idAgent, LLAvatarNameCache::get(idAgent, boost::bind(&LLNetMap::setAvatarProfileLabel, this, _1, _2, p.name.getValue()))); } p.on_click.function = boost::bind(&LLAvatarActions::showProfile, _2); p.on_click.parameter = idAgent; diff --git a/indra/newview/permissionstracker.cpp b/indra/newview/permissionstracker.cpp index ef5c496639..6899705ecc 100644 --- a/indra/newview/permissionstracker.cpp +++ b/indra/newview/permissionstracker.cpp @@ -225,8 +225,7 @@ void PermissionsTracker::objectPropertiesCallback(LLMessageSystem* msg) mPermissionsList[source_id].objectName = object_name; mPermissionsList[source_id].ownerID = object_owner; - LLAvatarName avatar_name; - if (LLAvatarNameCache::get(object_owner, &avatar_name)) + if (LLAvatarName avatar_name; LLAvatarNameCache::get(object_owner, &avatar_name)) { LL_DEBUGS("PermissionsTracker") << "Found cached entry for owner " << object_owner.asString() << ": " << avatar_name.getCompleteName() << LL_ENDL; @@ -234,10 +233,8 @@ void PermissionsTracker::objectPropertiesCallback(LLMessageSystem* msg) } else if (mAvatarNameCacheConnections.find(object_owner) != mAvatarNameCacheConnections.end()) { - boost::signals2::connection cb_connection = LLAvatarNameCache::get(object_owner, boost::bind(&PermissionsTracker::avatarNameCallback, this, _1, _2)); - mAvatarNameCacheConnections.insert(std::make_pair(object_owner, cb_connection)); - LL_DEBUGS("PermissionsTracker") << "Requesting avatar name for owner " << object_owner.asString() << LL_ENDL; + mAvatarNameCacheConnections.try_emplace(object_owner, LLAvatarNameCache::get(object_owner, boost::bind(&PermissionsTracker::avatarNameCallback, this, _1, _2))); } } }