mplemented EXT-2891 “Group notices should be recorded into group IM history”;

--HG--
branch : product-engine
meow-7.2.2
Alexei Arabadji 2009-11-30 21:41:17 +02:00
parent 5ed4c70156
commit 7c0eac93e7
5 changed files with 97 additions and 34 deletions

View File

@ -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

View File

@ -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

View File

@ -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();

View File

@ -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);
};
}

View File

@ -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);
}