summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelexperiencelog.cpp
blob: 009889a59fd25c282cb60d70cd91fce844ce63f4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
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);
}