summaryrefslogtreecommitdiff
path: root/indra/newview/llconversationmodel.cpp
diff options
context:
space:
mode:
authorMerov Linden <merov@lindenlab.com>2012-10-05 20:28:11 -0700
committerMerov Linden <merov@lindenlab.com>2012-10-05 20:28:11 -0700
commitdb452823e5cc615225f3f163d827954447cf9bd8 (patch)
treee245beb0e4a0a1c55458a22c3e15caca6f5172a3 /indra/newview/llconversationmodel.cpp
parentaeeeae2690c9ea612667ed46021e17cb083510e5 (diff)
CHUI-194 : WIP : Update the ad-hoc conversation line item title, add a new update_session event. Still some clean up to do.
Diffstat (limited to 'indra/newview/llconversationmodel.cpp')
-rw-r--r--indra/newview/llconversationmodel.cpp49
1 files changed, 46 insertions, 3 deletions
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
index b2b768bf9a..15824704fd 100644
--- a/indra/newview/llconversationmodel.cpp
+++ b/indra/newview/llconversationmodel.cpp
@@ -27,6 +27,8 @@
#include "llviewerprecompiledheaders.h"
+#include "llavatarnamecache.h"
+#include "llavataractions.h"
#include "llevents.h"
#include "llsdutil.h"
#include "llconversationmodel.h"
@@ -140,9 +142,48 @@ void LLConversationItemSession::addParticipant(LLConversationItemParticipant* pa
addChild(participant);
mIsLoaded = true;
mNeedsRefresh = true;
+ updateParticipantName(participant);
postEvent("add_participant", this, participant);
}
+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)
+ {
+ return;
+ }
+ // Avoid changing the default name if no participant present yet
+ if (mChildren.size() == 0)
+ {
+ return;
+ }
+ // Build a string containing the participants names and check if ready for display (we don't want "(waiting)" in there)
+ // *TODO: Further factor out common code with LLIMFloater::onParticipantsListChanged()
+ 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())
+ {
+ 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))
+ {
+ all_names_resolved = false;
+ break;
+ }
+ iter++;
+ }
+ if (all_names_resolved)
+ {
+ std::string new_session_name;
+ LLAvatarActions::buildResidentsString(temp_uuids, new_session_name);
+ renameItem(new_session_name);
+ postEvent("update_session", this, NULL);
+ }
+}
+
void LLConversationItemSession::removeParticipant(LLConversationItemParticipant* participant)
{
removeChild(participant);
@@ -340,11 +381,13 @@ void LLConversationItemParticipant::onAvatarNameCache(const LLAvatarName& av_nam
mName = (av_name.mUsername.empty() ? av_name.mDisplayName : av_name.mUsername);
mDisplayName = (av_name.mDisplayName.empty() ? av_name.mUsername : av_name.mDisplayName);
mNeedsRefresh = true;
- if (mParent)
+ LLConversationItemSession* parent_session = dynamic_cast<LLConversationItemSession*>(mParent);
+ if (parent_session)
{
- mParent->requestSort();
+ parent_session->requestSort();
+ parent_session->updateParticipantName(this);
}
- postEvent("update_participant", dynamic_cast<LLConversationItemSession*>(mParent), this);
+ postEvent("update_participant", parent_session, this);
}
void LLConversationItemParticipant::dumpDebugData()