summaryrefslogtreecommitdiff
path: root/indra/newview/llconversationmodel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llconversationmodel.cpp')
-rw-r--r--indra/newview/llconversationmodel.cpp51
1 files changed, 33 insertions, 18 deletions
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index 0837a49095..728b1a3f4c 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -27,9 +27,11 @@
#include "llviewerprecompiledheaders.h"
+#include "llagent.h"
#include "llavatarnamecache.h"
#include "llavataractions.h"
#include "llevents.h"
+#include "llfloaterimsession.h"
#include "llsdutil.h"
#include "llconversationmodel.h"
#include "llimview.h" //For LLIMModel
@@ -161,8 +163,9 @@ void LLConversationItemSession::addParticipant(LLConversationItemParticipant* pa
void LLConversationItemSession::updateParticipantName(LLConversationItemParticipant* participant)
{
- // We modify the session name only in the case of an ad-hoc session, exit otherwise (nothing to do)
- if (getType() != CONV_SESSION_AD_HOC)
+ EConversationType conversation_type = getType();
+ // We modify the session name only in the case of an ad-hoc session or P2P session, exit otherwise (nothing to do)
+ if ((conversation_type != CONV_SESSION_AD_HOC) && (conversation_type != CONV_SESSION_1_ON_1))
{
return;
}
@@ -171,26 +174,37 @@ void LLConversationItemSession::updateParticipantName(LLConversationItemParticip
{
return;
}
- // Build a string containing the participants names and check if ready for display (we don't want "(waiting)" in there)
- bool all_names_resolved = true;
uuid_vec_t temp_uuids; // uuids vector for building the added participants' names string
- child_list_t::iterator iter = mChildren.begin();
- while (iter != mChildren.end())
+ if (conversation_type == CONV_SESSION_AD_HOC)
{
- LLConversationItemParticipant* current_participant = dynamic_cast<LLConversationItemParticipant*>(*iter);
- temp_uuids.push_back(current_participant->getUUID());
- LLAvatarName av_name;
- if (!LLAvatarNameCache::get(current_participant->getUUID(), &av_name))
- {
- // If the name is not in the cache yet, bail out
- // Note: we don't bind ourselves to the LLAvatarNameCache event as we are called by
- // onAvatarNameCache() which is itself attached to the same event.
- all_names_resolved = false;
- break;
+ // Build a string containing the participants UUIDs (minus own agent) and check if ready for display (we don't want "(waiting)" in there)
+ // Note: we don't bind ourselves to the LLAvatarNameCache event as updateParticipantName() is called by
+ // onAvatarNameCache() which is itself attached to the same event.
+ child_list_t::iterator iter = mChildren.begin();
+ while (iter != mChildren.end())
+ {
+ LLConversationItemParticipant* current_participant = dynamic_cast<LLConversationItemParticipant*>(*iter);
+ // Add the avatar uuid to the list (except if it's the own agent uuid)
+ if (current_participant->getUUID() != gAgentID)
+ {
+ LLAvatarName av_name;
+ if (LLAvatarNameCache::get(current_participant->getUUID(), &av_name))
+ {
+ temp_uuids.push_back(current_participant->getUUID());
+ }
+ }
+ iter++;
}
- iter++;
}
- if (all_names_resolved)
+ else if (conversation_type == CONV_SESSION_1_ON_1)
+ {
+ // In the case of a P2P conversersation, we need to grab the name of the other participant in the session instance itself
+ // as we do not create participants for such a session.
+ LLFloaterIMSession *conversationFloater = LLFloaterIMSession::findInstance(mUUID);
+ LLUUID participantID = conversationFloater->getOtherParticipantUUID();
+ temp_uuids.push_back(participantID);
+ }
+ if (temp_uuids.size() != 0)
{
std::string new_session_name;
LLAvatarActions::buildResidentsString(temp_uuids, new_session_name);
@@ -203,6 +217,7 @@ void LLConversationItemSession::removeParticipant(LLConversationItemParticipant*
{
removeChild(participant);
mNeedsRefresh = true;
+ updateParticipantName(participant);
postEvent("remove_participant", this, participant);
}