diff options
author | Alexei Arabadji <aarabadji@productengine.com> | 2009-11-28 17:43:21 +0200 |
---|---|---|
committer | Alexei Arabadji <aarabadji@productengine.com> | 2009-11-28 17:43:21 +0200 |
commit | f0426b924f543c62268ac5098c0c2c6a44e68084 (patch) | |
tree | 63d81cf896b107cf35b3eecabefc032e021574df /indra | |
parent | 1cc80c60ca37453a8a15f84e61cb2491f2f57403 (diff) |
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-engine
Diffstat (limited to 'indra')
-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 |