implemented EXT-2889 "Incoming "grant modify rights" message should trigger
notify toast and adding record to IM history"; fixed avatar icon in IM-floater when message added to IM-session; avoided popup of IM-tast when message added to IM-session; --HG-- branch : product-enginemaster
parent
1cc80c60ca
commit
f0426b924f
|
|
@ -292,6 +292,7 @@ set(viewer_SOURCE_FILES
|
|||
llnetmap.cpp
|
||||
llnotificationalerthandler.cpp
|
||||
llnotificationgrouphandler.cpp
|
||||
llnotificationhandlerutil.cpp
|
||||
llnotificationmanager.cpp
|
||||
llnotificationofferhandler.cpp
|
||||
llnotificationscripthandler.cpp
|
||||
|
|
|
|||
|
|
@ -633,20 +633,21 @@ void LLAvatarTracker::processChange(LLMessageSystem* msg)
|
|||
{
|
||||
if((mBuddyInfo[agent_id]->getRightsGrantedFrom() ^ new_rights) & LLRelationship::GRANT_MODIFY_OBJECTS)
|
||||
{
|
||||
std::string first, last;
|
||||
std::string name;
|
||||
LLSD args;
|
||||
if(gCacheName->getName(agent_id, first, last))
|
||||
if(gCacheName->getFullName(agent_id, name))
|
||||
{
|
||||
args["FIRST_NAME"] = first;
|
||||
args["LAST_NAME"] = last;
|
||||
args["NAME"] = name;
|
||||
}
|
||||
LLSD payload;
|
||||
payload["from_id"] = agent_id;
|
||||
if(LLRelationship::GRANT_MODIFY_OBJECTS & new_rights)
|
||||
{
|
||||
LLNotificationsUtil::add("GrantedModifyRights",args);
|
||||
LLNotificationsUtil::add("GrantedModifyRights",args, payload);
|
||||
}
|
||||
else
|
||||
{
|
||||
LLNotificationsUtil::add("RevokedModifyRights",args);
|
||||
LLNotificationsUtil::add("RevokedModifyRights",args, payload);
|
||||
}
|
||||
}
|
||||
(mBuddyInfo[agent_id])->setRightsFrom(new_rights);
|
||||
|
|
|
|||
|
|
@ -476,19 +476,17 @@ bool LLIMModel::proccessOnlineOfflineNotification(
|
|||
}
|
||||
|
||||
bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& from_id,
|
||||
const std::string& utf8_text, bool log2file /* = true */) {
|
||||
const std::string& utf8_text, bool log2file /* = true */)
|
||||
{
|
||||
LLIMSession* session = findIMSession(session_id);
|
||||
|
||||
if (!session)
|
||||
if (!session)
|
||||
{
|
||||
llwarns << "session " << session_id << "does not exist " << llendl;
|
||||
return false;
|
||||
}
|
||||
|
||||
addToHistory(session_id, from, from_id, utf8_text);
|
||||
if (log2file) logToFile(session_id, from, from_id, utf8_text);
|
||||
|
||||
session->mNumUnread++;
|
||||
addMessageSilently(*session, from, from_id, utf8_text, log2file);
|
||||
|
||||
// notify listeners
|
||||
LLSD arg;
|
||||
|
|
@ -503,6 +501,15 @@ bool LLIMModel::addMessage(const LLUUID& session_id, const std::string& from, co
|
|||
return true;
|
||||
}
|
||||
|
||||
void LLIMModel::addMessageSilently(LLIMSession& session, const std::string& from, const LLUUID& from_id,
|
||||
const std::string& utf8_text, bool log2file /* = true */)
|
||||
{
|
||||
addToHistory(session.mSessionID, from, from_id, utf8_text);
|
||||
if (log2file) logToFile(session.mSessionID, from, from_id, utf8_text);
|
||||
|
||||
session.mNumUnread++;
|
||||
}
|
||||
|
||||
|
||||
const std::string& LLIMModel::getName(const LLUUID& session_id) const
|
||||
{
|
||||
|
|
|
|||
|
|
@ -145,6 +145,11 @@ public:
|
|||
*/
|
||||
bool addMessage(const LLUUID& session_id, const std::string& from, const LLUUID& other_participant_id, const std::string& utf8_text, bool log2file = true);
|
||||
|
||||
/**
|
||||
* Adds message without new message notification.
|
||||
*/
|
||||
void addMessageSilently(LLIMSession& session, const std::string& from, const LLUUID& other_participant_id, const std::string& utf8_text, bool log2file = true);
|
||||
|
||||
/**
|
||||
* Add a system message to an IM Model
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@
|
|||
//#include "llnotificationsutil.h"
|
||||
#include "llchannelmanager.h"
|
||||
#include "llchat.h"
|
||||
#include "llnotificationptr.h"
|
||||
|
||||
namespace LLNotificationsUI
|
||||
{
|
||||
|
|
@ -256,6 +257,20 @@ protected:
|
|||
void onRejectToast(LLUUID& id);
|
||||
};
|
||||
|
||||
class LLHandlerUtil
|
||||
{
|
||||
public:
|
||||
/**
|
||||
* Checks sufficient conditions to log notification message to IM session.
|
||||
*/
|
||||
static bool canLogToIM(const LLNotificationPtr& notification);
|
||||
|
||||
/**
|
||||
* Writes notification message to IM session.
|
||||
*/
|
||||
static void logToIM(const LLNotificationPtr& notification);
|
||||
};
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,88 @@
|
|||
/**
|
||||
* @file llnotificationofferhandler.cpp
|
||||
* @brief Provides set of utility methods for notifications processing.
|
||||
*
|
||||
* $LicenseInfo:firstyear=2000&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2000-2009, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*/
|
||||
|
||||
|
||||
#include "llviewerprecompiledheaders.h" // must be first include
|
||||
|
||||
#include "llnotificationhandler.h"
|
||||
#include "llnotifications.h"
|
||||
#include "llimview.h"
|
||||
|
||||
using namespace LLNotificationsUI;
|
||||
|
||||
const static std::string GRANTED_MODIFY_RIGHTS("GrantedModifyRights"),
|
||||
REVOKED_MODIFY_RIGHTS("RevokedModifyRights"), OBJECT_GIVE_ITEM(
|
||||
"ObjectGiveItem"), OBJECT_GIVE_ITEM_UNKNOWN_USER(
|
||||
"ObjectGiveItemUnknownUser");
|
||||
|
||||
// static
|
||||
bool LLHandlerUtil::canLogToIM(const LLNotificationPtr& notification)
|
||||
{
|
||||
return GRANTED_MODIFY_RIGHTS == notification->getName()
|
||||
|| REVOKED_MODIFY_RIGHTS == notification->getName();
|
||||
}
|
||||
|
||||
// static
|
||||
void LLHandlerUtil::logToIM(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
|
||||
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)
|
||||
{
|
||||
session_id = LLIMMgr::instance().addSession(name,
|
||||
IM_NOTHING_SPECIAL, from_id);
|
||||
session = LLIMModel::instance().findIMSession(session_id);
|
||||
}
|
||||
|
||||
if (session == NULL)
|
||||
{
|
||||
llerrs << "session " << session_id << "does not exist " << llendl;
|
||||
return;
|
||||
}
|
||||
|
||||
LLIMModel::instance().addMessageSilently(*session, name, from_id,
|
||||
notification->getMessage());
|
||||
}
|
||||
}
|
||||
|
|
@ -37,8 +37,6 @@
|
|||
#include "lltoastnotifypanel.h"
|
||||
#include "llviewercontrol.h"
|
||||
#include "llviewerwindow.h"
|
||||
#include "llimview.h"
|
||||
#include "llimfloater.h"
|
||||
#include "llnotificationmanager.h"
|
||||
#include "llnotifications.h"
|
||||
|
||||
|
|
@ -92,27 +90,7 @@ bool LLOfferHandler::processNotification(const LLSD& notify)
|
|||
|
||||
if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
|
||||
{
|
||||
// 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
|
||||
if (notification->getName() != "ObjectGiveItem"
|
||||
&& notification->getName() != "ObjectGiveItemUnknownUser")
|
||||
{
|
||||
LLUUID from_id = notification->getPayload()["from_id"];
|
||||
LLUUID session_id = LLIMMgr::computeSessionID(IM_NOTHING_SPECIAL,
|
||||
from_id);
|
||||
if (!LLIMMgr::instance().hasSession(session_id))
|
||||
{
|
||||
session_id = LLIMMgr::instance().addSession(name,
|
||||
IM_NOTHING_SPECIAL, from_id);
|
||||
}
|
||||
LLIMMgr::instance().addMessage(session_id, LLUUID(), name,
|
||||
notification->getMessage());
|
||||
}
|
||||
LLHandlerUtil::logToIM(notification);
|
||||
|
||||
LLToastNotifyPanel* notify_box = new LLToastNotifyPanel(notification);
|
||||
|
||||
|
|
|
|||
|
|
@ -96,6 +96,11 @@ bool LLScriptHandler::processNotification(const LLSD& notify)
|
|||
|
||||
if(notify["sigtype"].asString() == "add" || notify["sigtype"].asString() == "change")
|
||||
{
|
||||
if (LLHandlerUtil::canLogToIM(notification))
|
||||
{
|
||||
LLHandlerUtil::logToIM(notification);
|
||||
}
|
||||
|
||||
if(SCRIPT_DIALOG == notification->getName() || SCRIPT_DIALOG_GROUP == notification->getName() || SCRIPT_LOAD_URL == notification->getName())
|
||||
{
|
||||
LLScriptFloaterManager::getInstance()->onAddNotification(notification->getID());
|
||||
|
|
|
|||
|
|
@ -2382,15 +2382,15 @@ Please choose the male or female avatar. You can change your mind later.
|
|||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="GrantedModifyRights"
|
||||
type="alertmodal">
|
||||
[FIRST_NAME] [LAST_NAME] has given you permission to edit their objects.
|
||||
type="notify">
|
||||
[NAME] has given you permission to edit their objects.
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
icon="alertmodal.tga"
|
||||
name="RevokedModifyRights"
|
||||
type="alertmodal">
|
||||
Your privilege to modify [FIRST_NAME] [LAST_NAME]'s objects has been revoked
|
||||
type="notify">
|
||||
Your privilege to modify [NAME]'s objects has been revoked
|
||||
</notification>
|
||||
|
||||
<notification
|
||||
|
|
|
|||
Loading…
Reference in New Issue