summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
authorAlexei Arabadji <aarabadji@productengine.com>2009-11-28 17:43:21 +0200
committerAlexei Arabadji <aarabadji@productengine.com>2009-11-28 17:43:21 +0200
commitf0426b924f543c62268ac5098c0c2c6a44e68084 (patch)
tree63d81cf896b107cf35b3eecabefc032e021574df /indra/newview
parent1cc80c60ca37453a8a15f84e61cb2491f2f57403 (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/newview')
-rw-r--r--indra/newview/CMakeLists.txt1
-rw-r--r--indra/newview/llcallingcard.cpp13
-rw-r--r--indra/newview/llimview.cpp19
-rw-r--r--indra/newview/llimview.h5
-rw-r--r--indra/newview/llnotificationhandler.h15
-rw-r--r--indra/newview/llnotificationhandlerutil.cpp88
-rw-r--r--indra/newview/llnotificationofferhandler.cpp24
-rw-r--r--indra/newview/llnotificationscripthandler.cpp5
-rw-r--r--indra/newview/skins/default/xui/en/notifications.xml8
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]&apos;s objects has been revoked
+ type="notify">
+Your privilege to modify [NAME]&apos;s objects has been revoked
</notification>
<notification