Fix loading name of banned residents in group bulk ban panel

master
Ansariel 2025-06-19 15:49:10 +02:00 committed by Andrey Lihatskiy
parent 03b6d09ae5
commit feb4494365
2 changed files with 31 additions and 35 deletions

View File

@ -54,17 +54,16 @@
//////////////////////////////////////////////////////////////////////////
LLPanelGroupBulkImpl::LLPanelGroupBulkImpl(const LLUUID& group_id) :
mGroupID(group_id),
mBulkAgentList(NULL),
mOKButton(NULL),
mBulkAgentList(nullptr),
mOKButton(nullptr),
mAddButton(nullptr),
mRemoveButton(NULL),
mGroupName(NULL),
mRemoveButton(nullptr),
mGroupName(nullptr),
mLoadingText(),
mTooManySelected(),
mCloseCallback(NULL),
mCloseCallbackUserData(NULL),
mAvatarNameCacheConnection(),
mRoleNames(NULL),
mCloseCallback(nullptr),
mCloseCallbackUserData(nullptr),
mRoleNames(nullptr),
mOwnerWarning(),
mAlreadyInGroup(),
mConfirmedOwnerInvite(false),
@ -74,10 +73,13 @@ LLPanelGroupBulkImpl::LLPanelGroupBulkImpl(const LLUUID& group_id) :
LLPanelGroupBulkImpl::~LLPanelGroupBulkImpl()
{
if (mAvatarNameCacheConnection.connected())
for (auto& [id, connection] : mAvatarNameCacheConnections)
{
mAvatarNameCacheConnection.disconnect();
if (connection.connected())
connection.disconnect();
}
mAvatarNameCacheConnections.clear();
}
void LLPanelGroupBulkImpl::callbackClickAdd(LLPanelGroupBulk* panelp)
@ -124,43 +126,42 @@ void LLPanelGroupBulkImpl::callbackSelect(LLUICtrl* ctrl, void* userdata)
void LLPanelGroupBulkImpl::addUsers(const uuid_vec_t& agent_ids)
{
std::vector<std::string> names;
for (const LLUUID& agent_id : agent_ids)
{
LLAvatarName av_name;
if (LLAvatarNameCache::get(agent_id, &av_name))
if (LLAvatarName av_name; LLAvatarNameCache::get(agent_id, &av_name))
{
onAvatarNameCache(agent_id, av_name);
}
else
{
if (mAvatarNameCacheConnection.connected())
if (auto found = mAvatarNameCacheConnections.find(agent_id); found != mAvatarNameCacheConnections.end())
{
mAvatarNameCacheConnection.disconnect();
if (found->second.connected())
found->second.disconnect();
mAvatarNameCacheConnections.erase(found);
}
// *TODO : Add a callback per avatar name being fetched.
mAvatarNameCacheConnection = LLAvatarNameCache::get(agent_id,
mAvatarNameCacheConnections.try_emplace(agent_id, LLAvatarNameCache::get(agent_id,
[&](const LLUUID& agent_id, const LLAvatarName& av_name)
{
onAvatarNameCache(agent_id, av_name);
});
}));
}
}
}
void LLPanelGroupBulkImpl::onAvatarNameCache(const LLUUID& agent_id, const LLAvatarName& av_name)
{
if (mAvatarNameCacheConnection.connected())
if (auto found = mAvatarNameCacheConnections.find(agent_id); found != mAvatarNameCacheConnections.end())
{
mAvatarNameCacheConnection.disconnect();
if (found->second.connected())
found->second.disconnect();
mAvatarNameCacheConnections.erase(found);
}
std::vector<std::string> names;
uuid_vec_t agent_ids;
agent_ids.push_back(agent_id);
names.push_back(av_name.getCompleteName());
addUsers(names, agent_ids);
addUsers({ av_name.getCompleteName() }, { agent_id });
}
void LLPanelGroupBulkImpl::handleRemove()
@ -232,7 +233,7 @@ void LLPanelGroupBulkImpl::addUsers(const std::vector<std::string>& names, const
}
}
void LLPanelGroupBulkImpl::setGroupName(std::string name)
void LLPanelGroupBulkImpl::setGroupName(const std::string& name)
{
if (mGroupName)
{
@ -337,12 +338,7 @@ void LLPanelGroupBulk::updateGroupData()
void LLPanelGroupBulk::addUserCallback(const LLUUID& id, const LLAvatarName& av_name)
{
std::vector<std::string> names;
uuid_vec_t agent_ids;
agent_ids.push_back(id);
names.push_back(av_name.getAccountName());
mImplementation->addUsers(names, agent_ids);
mImplementation->addUsers({ av_name.getAccountName() }, { id });
}
void LLPanelGroupBulk::setCloseCallback(void (*close_callback)(void*), void* data)

View File

@ -59,7 +59,7 @@ public:
void handleSelection();
void addUsers(const std::vector<std::string>& names, const uuid_vec_t& agent_ids);
void setGroupName(std::string name);
void setGroupName(const std::string& name);
public:
@ -84,7 +84,7 @@ public:
void (*mCloseCallback)(void* data);
void* mCloseCallbackUserData;
boost::signals2::connection mAvatarNameCacheConnection;
std::map<LLUUID, boost::signals2::connection> mAvatarNameCacheConnections;
// The following are for the LLPanelGroupInvite subclass only.
// These aren't needed for LLPanelGroupBulkBan, but if we have to add another