summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorJames Cook <james@lindenlab.com>2010-05-25 11:40:29 -0700
committerJames Cook <james@lindenlab.com>2010-05-25 11:40:29 -0700
commitd6ea42984553b7adb6f26cf2ed094d32e36814d2 (patch)
tree25fe04a20b89ce63ad5c6b32856371c46a728c08 /indra/newview
parentfb51f985c35f5dae85057ad932928b8fcd44cc73 (diff)
DEV-50013 Display names load at startup in local chat/IM history
Had to change the chat log file format to include agent_id. Code will load viewer 2.0 logs, but viewer 2.0 will just discard data from 2.1 logs, which seems OK. Reviewed with Leyla.
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/llimview.cpp24
-rw-r--r--indra/newview/lllogchat.cpp27
-rw-r--r--indra/newview/lllogchat.h2
-rw-r--r--indra/newview/llnearbychat.cpp8
4 files changed, 47 insertions, 14 deletions
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
index e915d3ad70..e6db942bad 100644
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -270,7 +270,7 @@ void LLIMModel::LLIMSession::onVoiceChannelStateChanged(const LLVoiceChannel::ES
// no text notifications
break;
case P2P_SESSION:
- gCacheName->getFullName(mOtherParticipantID, other_avatar_name);
+ gCacheName->getFullName(mOtherParticipantID, other_avatar_name); // voice
if(direction == LLVoiceChannel::INCOMING_CALL)
{
@@ -405,13 +405,17 @@ void LLIMModel::LLIMSession::addMessagesFromHistory(const std::list<LLSD>& histo
const LLSD& msg = *it;
std::string from = msg[IM_FROM];
- LLUUID from_id = LLUUID::null;
- if (msg[IM_FROM_ID].isUndefined())
+ LLUUID from_id;
+ if (msg[IM_FROM_ID].isDefined())
{
+ from_id = msg[IM_FROM_ID].asUUID();
+ }
+ else
+ {
+ // Legacy chat logs only wrote the legacy name, not the agent_id
gCacheName->getUUID(from, from_id);
}
-
std::string timestamp = msg[IM_TIME];
std::string text = msg[IM_TEXT];
@@ -2582,7 +2586,7 @@ void LLIMMgr::inviteToSession(
{
if (caller_name.empty())
{
- gCacheName->get(caller_id, false,
+ gCacheName->get(caller_id, false, // voice
boost::bind(&LLIMMgr::onInviteNameLookup, payload, _1, _2, _3));
}
else
@@ -2816,12 +2820,14 @@ void LLIMMgr::noteOfflineUsers(
for(S32 i = 0; i < count; ++i)
{
info = at.getBuddyInfo(ids.get(i));
- std::string full_name;
- if(info && !info->isOnline()
- && gCacheName->getFullName(ids.get(i), full_name))
+ LLAvatarName av_name;
+ if (info
+ && !info->isOnline()
+ && LLAvatarNameCache::get(ids.get(i), &av_name))
{
LLUIString offline = LLTrans::getString("offline_message");
- offline.setArg("[NAME]", full_name);
+ // Use display name only because this user is your friend
+ offline.setArg("[NAME]", av_name.mDisplayName);
im_model.proccessOnlineOfflineNotification(session_id, offline);
}
}
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
index be8b2363ad..1d348834fe 100644
--- a/indra/newview/lllogchat.cpp
+++ b/indra/newview/lllogchat.cpp
@@ -426,6 +426,12 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
return;
}
+ if (im[IM_FROM_ID].isDefined())
+ {
+ LLUUID from_id = im[IM_FROM_ID].asUUID();
+ ostr << '{' << from_id.asString() << '}';
+ }
+
if (im[IM_TIME].isDefined())
{
std::string timestamp = im[IM_TIME].asString();
@@ -456,15 +462,32 @@ void LLChatLogFormatter::format(const LLSD& im, std::ostream& ostr) const
}
}
-bool LLChatLogParser::parse(std::string& raw, LLSD& im)
+bool LLChatLogParser::parse(const std::string& raw, LLSD& im)
{
if (!raw.length()) return false;
im = LLSD::emptyMap();
+ // In Viewer 2.1 we added UUID to chat/IM logging so we can look up
+ // display names
+ std::string line = raw;
+ if (raw[0] == '{')
+ {
+ const S32 UUID_LEN = 36;
+ size_t pos = line.find_first_of('}');
+ // If it matches, pos will be 37
+ if (pos != line.npos && pos > UUID_LEN)
+ {
+ std::string uuid_string = line.substr(1, UUID_LEN);
+ LLUUID from_id(uuid_string);
+ im[IM_FROM_ID] = from_id;
+ line = line.substr(pos + 1);
+ }
+ }
+
//matching a timestamp
boost::match_results<std::string::const_iterator> matches;
- if (!boost::regex_match(raw, matches, TIMESTAMP_AND_STUFF)) return false;
+ if (!boost::regex_match(line, matches, TIMESTAMP_AND_STUFF)) return false;
bool has_timestamp = matches[IDX_TIMESTAMP].matched;
if (has_timestamp)
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
index 4290e4bbc0..a67b58e55b 100644
--- a/indra/newview/lllogchat.h
+++ b/indra/newview/lllogchat.h
@@ -106,7 +106,7 @@ public:
*
* @return false if failed to parse mandatory data - message text
*/
- static bool parse(std::string& raw, LLSD& im);
+ static bool parse(const std::string& raw, LLSD& im);
protected:
LLChatLogParser();
diff --git a/indra/newview/llnearbychat.cpp b/indra/newview/llnearbychat.cpp
index f1c13de8bb..74ede67c97 100644
--- a/indra/newview/llnearbychat.cpp
+++ b/indra/newview/llnearbychat.cpp
@@ -301,8 +301,12 @@ void LLNearbyChat::loadHistory()
const LLSD& msg = *it;
std::string from = msg[IM_FROM];
- LLUUID from_id = LLUUID::null;
- if (msg[IM_FROM_ID].isUndefined())
+ LLUUID from_id;
+ if (msg[IM_FROM_ID].isDefined())
+ {
+ from_id = msg[IM_FROM_ID].asUUID();
+ }
+ else
{
gCacheName->getUUID(from, from_id);
}