summaryrefslogtreecommitdiff
path: root/indra/newview/llnotificationhandlerutil.cpp
diff options
context:
space:
mode:
authorAlexei Arabadji <aarabadji@productengine.com>2009-11-30 21:41:17 +0200
committerAlexei Arabadji <aarabadji@productengine.com>2009-11-30 21:41:17 +0200
commit7c0eac93e7444bc1896f8ed0ee26888ff54a33bf (patch)
tree02c6ef3697dd22696be6ac8a3f1f1d83bb784c43 /indra/newview/llnotificationhandlerutil.cpp
parent5ed4c7015641b0739291c7fc75b67aa5b0ed36fc (diff)
mplemented EXT-2891 “Group notices should be recorded into group IM history”;
--HG-- branch : product-engine
Diffstat (limited to 'indra/newview/llnotificationhandlerutil.cpp')
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp88
1 files changed, 62 insertions, 26 deletions
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
index a30f896fa2..05da338513 100644
--- a/indra/newview/llnotificationhandlerutil.cpp
+++ b/indra/newview/llnotificationhandlerutil.cpp
@@ -36,6 +36,7 @@
#include "llnotificationhandler.h"
#include "llnotifications.h"
#include "llimview.h"
+#include "llagent.h"
using namespace LLNotificationsUI;
@@ -52,42 +53,77 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
}
// static
+void LLHandlerUtil::logToIM(const EInstantMessage& session_type,
+ const std::string& session_name, const std::string& from_name,
+ const std::string& message, const LLUUID& session_owner_id,
+ const LLUUID& from_id)
+{
+ LLUUID session_id = LLIMMgr::computeSessionID(session_type,
+ session_owner_id);
+ LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(
+ session_id);
+ if (session == NULL)
+ {
+ LLIMModel::instance().logToFile(session_name, from_name, from_id, message);
+ }
+ else
+ {
+ // store active session id
+ const LLUUID & active_session_id =
+ LLIMModel::instance().getActiveSessionID();
+
+ // set searched session as active to avoid IM toast popup
+ LLIMModel::instance().setActiveSessionID(session_id);
+
+ LLIMModel::instance().addMessage(session_id, from_name, from_id,
+ message);
+
+ // restore active session id
+ LLIMModel::instance().setActiveSessionID(active_session_id);
+ }
+}
+
+// static
void LLHandlerUtil::logToIMP2P(const LLNotificationPtr& notification)
{
- // add message to IM
const std::string
name =
notification->getSubstitutions().has("NAME") ? notification->getSubstitutions()["NAME"]
: notification->getSubstitutions()["[NAME]"];
- // don't create IM session with objects, it's necessary condition to log
+ // don't create IM p2p session with objects, it's necessary condition to log
if (notification->getName() != OBJECT_GIVE_ITEM && notification->getName()
!= OBJECT_GIVE_ITEM_UNKNOWN_USER)
{
LLUUID from_id = notification->getPayload()["from_id"];
- LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL,
- from_id);
-
- LLIMModel::LLIMSession* session = LLIMModel::instance().findIMSession(session_id);
- if (session == NULL)
- {
- LLIMModel::instance().logToFile(session_id, name, from_id,
- notification->getMessage());
- }
- else
- {
- // store active session id
- const LLUUID & active_session_id =
- LLIMModel::instance().getActiveSessionID();
-
- // set searched session as active to avoid IM toast popup
- LLIMModel::instance().setActiveSessionID(session->mSessionID);
-
- LLIMModel::instance().addMessage(session->mSessionID, name, from_id,
- notification->getMessage());
-
- // restore active session id
- LLIMModel::instance().setActiveSessionID(active_session_id);
- }
+
+ logToIM(IM_NOTHING_SPECIAL, name, name, notification->getMessage(),
+ from_id, from_id);
}
}
+
+// static
+void LLHandlerUtil::logGroupNoticeToIMGroup(
+ const LLNotificationPtr& notification)
+{
+
+ const LLSD& payload = notification->getPayload();
+ LLGroupData groupData;
+ if (!gAgent.getGroupData(payload["group_id"].asUUID(), groupData))
+ {
+ llwarns
+ << "Group notice for unkown group: "
+ << payload["group_id"].asUUID() << llendl;
+ }
+
+ const std::string group_name = groupData.mName;
+ const std::string sender_name = payload["sender_name"].asString();
+
+ // we can't retrieve sender id from group notice system message, so try to lookup it from cache
+ LLUUID sender_id;
+ gCacheName->getUUID(sender_name, sender_id);
+
+ logToIM(IM_SESSION_GROUP_START, group_name, sender_name, payload["message"],
+ payload["group_id"], sender_id);
+}
+