diff options
| -rw-r--r-- | indra/newview/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | indra/newview/llcallingcard.cpp | 13 | ||||
| -rw-r--r-- | indra/newview/llimview.cpp | 19 | ||||
| -rw-r--r-- | indra/newview/llimview.h | 5 | ||||
| -rw-r--r-- | indra/newview/llnotificationhandler.h | 15 | ||||
| -rw-r--r-- | indra/newview/llnotificationhandlerutil.cpp | 88 | ||||
| -rw-r--r-- | indra/newview/llnotificationofferhandler.cpp | 24 | ||||
| -rw-r--r-- | indra/newview/llnotificationscripthandler.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/notifications.xml | 8 | 
9 files changed, 139 insertions, 39 deletions
| diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index e7e89d9701..65b172b184 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -292,6 +292,7 @@ set(viewer_SOURCE_FILES      llnetmap.cpp      llnotificationalerthandler.cpp      llnotificationgrouphandler.cpp +    llnotificationhandlerutil.cpp      llnotificationmanager.cpp      llnotificationofferhandler.cpp      llnotificationscripthandler.cpp diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp index 476f1f41ac..714bd20ab8 100644 --- a/indra/newview/llcallingcard.cpp +++ b/indra/newview/llcallingcard.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); diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp index dff339fa63..2f88578739 100644 --- a/indra/newview/llimview.cpp +++ b/indra/newview/llimview.cpp @@ -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  { diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h index 79b0acad69..72fd006222 100644 --- a/indra/newview/llimview.h +++ b/indra/newview/llimview.h @@ -146,6 +146,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  	 */  	bool proccessOnlineOfflineNotification(const LLUUID& session_id, const std::string& utf8_text); diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h index 29664e1919..d42b0148d6 100644 --- a/indra/newview/llnotificationhandler.h +++ b/indra/newview/llnotificationhandler.h @@ -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 diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp new file mode 100644 index 0000000000..e1236b935e --- /dev/null +++ b/indra/newview/llnotificationhandlerutil.cpp @@ -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()); +	} +} diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp index 45b5e88472..cfe7fd09ac 100644 --- a/indra/newview/llnotificationofferhandler.cpp +++ b/indra/newview/llnotificationofferhandler.cpp @@ -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); diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp index 8c159b40e8..6f91b6e58b 100644 --- a/indra/newview/llnotificationscripthandler.cpp +++ b/indra/newview/llnotificationscripthandler.cpp @@ -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()); diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 79ef1d104b..49276172d5 100644 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -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 | 
