mplemented EXT-2891 “Group notices should be recorded into group IM history”;
--HG-- branch : product-enginemeow-7.2.2
parent
5ed4c70156
commit
7c0eac93e7
|
|
@ -451,17 +451,24 @@ bool LLIMModel::addToHistory(const LLUUID& session_id, const std::string& from,
|
|||
return true;
|
||||
}
|
||||
|
||||
bool LLIMModel::logToFile(const std::string& session_name, const std::string& from, const LLUUID& from_id, const std::string& utf8_text)
|
||||
{
|
||||
if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
|
||||
{
|
||||
LLLogChat::saveHistory(session_name, from, from_id, utf8_text);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool LLIMModel::logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text)
|
||||
{
|
||||
if (gSavedPerAccountSettings.getBOOL("LogInstantMessages"))
|
||||
{
|
||||
std::string name = LLIMModel::getInstance()->getName(session_id);
|
||||
if (name == LLStringUtil::null)
|
||||
{
|
||||
name = from;
|
||||
}
|
||||
|
||||
LLLogChat::saveHistory(name, from, from_id, utf8_text);
|
||||
LLLogChat::saveHistory(LLIMModel::getInstance()->getName(session_id), from, from_id, utf8_text);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -201,9 +201,9 @@ public:
|
|||
void testMessages();
|
||||
|
||||
/**
|
||||
* Save an IM message into a file
|
||||
* Saves an IM message into a file
|
||||
*/
|
||||
bool logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text);
|
||||
bool logToFile(const std::string& session_name, const std::string& from, const LLUUID& from_id, const std::string& utf8_text);
|
||||
|
||||
private:
|
||||
|
||||
|
|
@ -211,6 +211,11 @@ private:
|
|||
* Add message to a list of message associated with session specified by session_id
|
||||
*/
|
||||
bool addToHistory(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text);
|
||||
|
||||
/**
|
||||
* Save an IM message into a file
|
||||
*/
|
||||
bool logToFile(const LLUUID& session_id, const std::string& from, const LLUUID& from_id, const std::string& utf8_text);
|
||||
};
|
||||
|
||||
class LLIMSessionObserver
|
||||
|
|
|
|||
|
|
@ -88,6 +88,8 @@ bool LLGroupHandler::processNotification(const LLSD& notify)
|
|||
|
||||
if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
|
||||
{
|
||||
LLHandlerUtil::logGroupNoticeToIMGroup(notification);
|
||||
|
||||
LLPanel* notify_box = new LLToastGroupNotifyPanel(notification);
|
||||
LLToast::Params p;
|
||||
p.notif_id = notification->getID();
|
||||
|
|
|
|||
|
|
@ -268,7 +268,20 @@ public:
|
|||
/**
|
||||
* Writes notification message to IM session.
|
||||
*/
|
||||
static void 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);
|
||||
|
||||
/**
|
||||
* Writes notification message to IM p2p session.
|
||||
*/
|
||||
static void logToIMP2P(const LLNotificationPtr& notification);
|
||||
|
||||
/**
|
||||
* Writes group notice notification message to IM group session.
|
||||
*/
|
||||
static void logGroupNoticeToIMGroup(const LLNotificationPtr& notification);
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include "llnotificationhandler.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llimview.h"
|
||||
#include "llagent.h"
|
||||
|
||||
using namespace LLNotificationsUI;
|
||||
|
||||
|
|
@ -51,43 +52,78 @@ bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
|
|||
|| REVOKED_MODIFY_RIGHTS == notification->getName();
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue