summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelexperiencelog.cpp
diff options
context:
space:
mode:
authordolphin <dolphin@lindenlab.com>2014-03-18 14:12:22 -0700
committerdolphin <dolphin@lindenlab.com>2014-03-18 14:12:22 -0700
commitb2591ca63c498ab606bf595e0b2e729e76caea24 (patch)
tree1ecbf64ca09c92b69c99b117787073499762f673 /indra/newview/llpanelexperiencelog.cpp
parent2604b3419657cb3bb8bafb90b1d9e5e43f11db4d (diff)
Added a default message handler for experience logs. Currently just forwards the
notification.
Diffstat (limited to 'indra/newview/llpanelexperiencelog.cpp')
-rw-r--r--indra/newview/llpanelexperiencelog.cpp118
1 files changed, 118 insertions, 0 deletions
diff --git a/indra/newview/llpanelexperiencelog.cpp b/indra/newview/llpanelexperiencelog.cpp
new file mode 100644
index 0000000000..009889a59f
--- /dev/null
+++ b/indra/newview/llpanelexperiencelog.cpp
@@ -0,0 +1,118 @@
+/**
+ * @file llpanelexperiencelog.cpp
+ * @brief llpanelexperiencelog
+ *
+ * $LicenseInfo:firstyear=2014&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2014, Linden Research, Inc.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ *
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA
+ * $/LicenseInfo$
+ */
+
+
+#include "llviewerprecompiledheaders.h"
+#include "llpanelexperiencelog.h"
+#include "lldispatcher.h"
+#include "llsdserialize.h"
+#include "llviewergenericmessage.h"
+#include "llnotificationsutil.h"
+#include "lltrans.h"
+
+
+class LLExperienceLogDispatchHandler : public LLDispatchHandler
+{
+public:
+ virtual bool operator()(
+ const LLDispatcher* dispatcher,
+ const std::string& key,
+ const LLUUID& invoice,
+ const sparam_t& strings)
+ {
+ LLSD message;
+
+ sparam_t::const_iterator it = strings.begin();
+ if(it != strings.end()){
+ const std::string& llsdRaw = *it++;
+ std::istringstream llsdData(llsdRaw);
+ if (!LLSDSerialize::deserialize(message, llsdData, llsdRaw.length()))
+ {
+ llwarns << "LLExperienceLogDispatchHandler: Attempted to read parameter data into LLSD but failed:" << llsdRaw << llendl;
+ }
+ }
+ message["public_id"] = invoice;
+
+ // Object Name
+ if(it != strings.end())
+ {
+ message["ObjectName"] = *it++;
+ }
+
+ // parcel Name
+ if(it != strings.end())
+ {
+ message["ParcelName"] = *it++;
+ }
+
+ LLExperienceLog::instance().handleExperienceMessage(message);
+ return true;
+ }
+};
+
+static LLExperienceLogDispatchHandler experience_log_dispatch_handler;
+
+void LLExperienceLog::handleExperienceMessage(LLSD& message)
+{
+ std::ostringstream str;
+ if(message.has("Permission"))
+ {
+ str << "ExperiencePermission" << message["Permission"].asInteger();
+ std::string entry;
+ if(LLTrans::findString(entry, str.str()))
+ {
+ str.str(entry);
+ }
+ else
+ {
+ str.str();
+ }
+ }
+
+ if(str.str().empty())
+ {
+ str.str(LLTrans::getString("ExperiencePermissionUnknown", message));
+ }
+
+ message["EventType"] = str.str();
+ if(message.has("IsAttachment") && message["IsAttachment"].asBoolean())
+ {
+ LLNotificationsUtil::add("ExperienceEventAttachment", message);
+ }
+ else
+ {
+ LLNotificationsUtil::add("ExperienceEvent", message);
+ }
+}
+
+LLExperienceLog::LLExperienceLog()
+{
+}
+
+void LLExperienceLog::initialize()
+{
+ gGenericDispatcher.addHandler("ExperienceEvent", &experience_log_dispatch_handler);
+}