1 // Copyright 2014 Samsung Electronics Co, Ltd. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "push/push_instance.h"
8 #include "common/logger.h"
9 #include "push/push_manager.h"
14 PushInstance::PushInstance():
15 m_ignoreNotificationEvents(true) {
17 using std::placeholders::_1;
18 using std::placeholders::_2;
19 RegisterHandler("Push_registerService",
20 std::bind(&PushInstance::registerService, this, _1, _2));
21 RegisterHandler("Push_unregisterService",
22 std::bind(&PushInstance::unregisterService, this, _1, _2));
23 RegisterSyncHandler("Push_connectService",
24 std::bind(&PushInstance::connectService, this, _1, _2));
25 RegisterSyncHandler("Push_disconnectService",
26 std::bind(&PushInstance::disconnectService, this, _1, _2));
27 RegisterSyncHandler("Push_getRegistrationId",
28 std::bind(&PushInstance::getRegistrationId, this, _1, _2));
29 RegisterSyncHandler("Push_getUnreadNotifications",
30 std::bind(&PushInstance::getUnreadNotifications, this, _1, _2));
31 PushManager::getInstance().setListener(this);
34 void PushInstance::registerService(const picojson::value& args,
35 picojson::object& out) {
37 PushManager::ApplicationControl appControl;
38 appControl.operation = args.get("operation").get<std::string>();
39 if (args.get("uri").is<std::string>()) {
40 appControl.uri = args.get("uri").get<std::string>();
42 if (args.get("mime").is<std::string>()) {
43 appControl.mime = args.get("mime").get<std::string>();
45 if (args.get("category").is<std::string>()) {
46 appControl.category = args.get("category").get<std::string>();
48 if (args.get("data").is<picojson::null>() == false) {
49 std::vector<picojson::value> dataArray =
50 args.get("data").get<picojson::array>();
51 for (auto &item : dataArray) {
52 std::string key = item.get("key").get<std::string>();
53 std::vector<picojson::value> values =
54 item.get("value").get<picojson::array>();
55 for (auto &value : values) {
56 appControl.data[key].push_back(value.to_str());
60 common::PlatformResult result = PushManager::getInstance().registerService(
62 args.get("callbackId").get<double>());
63 if (result.IsError()) {
64 LoggerE("Error occured");
65 ReportError(result, &out);
67 picojson::value result;
68 ReportSuccess(result, out);
72 void PushInstance::unregisterService(const picojson::value& args,
73 picojson::object& out) {
75 common::PlatformResult result = PushManager::getInstance()
76 .unregisterService(args.get("callbackId").get<double>());
77 if (result.IsError()) {
78 LoggerE("Error occured");
79 ReportError(result, &out);
82 ReportSuccess(res, out);
86 void PushInstance::connectService(const picojson::value& args,
87 picojson::object& out) {
89 m_ignoreNotificationEvents = false;
90 picojson::value result;
91 ReportSuccess(result, out);
94 void PushInstance::disconnectService(const picojson::value& args,
95 picojson::object& out) {
97 m_ignoreNotificationEvents = true;
98 picojson::value result;
99 ReportSuccess(result, out);
102 void PushInstance::getRegistrationId(const picojson::value& args,
103 picojson::object& out) {
106 common::PlatformResult result = PushManager::getInstance()
107 .getRegistrationId(id);
108 if (result.IsError()) {
109 // this method should fail silently and return null
110 picojson::value res = picojson::value();
111 ReportSuccess(res, out);
113 picojson::value res(id);
114 ReportSuccess(res, out);
118 void PushInstance::getUnreadNotifications(const picojson::value& args,
119 picojson::object& out) {
121 common::PlatformResult result = PushManager::getInstance()
122 .getUnreadNotifications();
123 if (result.IsError()) {
124 LoggerE("Error occured");
125 ReportError(result, &out);
128 ReportSuccess(res, out);
132 void PushInstance::onPushRegister(double callbackId,
133 common::PlatformResult result, const std::string& id) {
135 picojson::value::object dict;
136 dict["callbackId"] = picojson::value(callbackId);
137 if (result.IsError()) {
138 dict["error"] = result.ToJSON();
140 dict["registrationId"] = picojson::value(id);
142 picojson::value res(dict);
143 PostMessage(res.serialize().c_str());
146 void PushInstance::onPushNotify(const std::string& appData,
147 const std::string& alertMessage, double date) {
149 if (m_ignoreNotificationEvents) {
150 LoggerD("Listener not set, ignoring event");
152 picojson::value::object dict;
153 dict["listenerId"] = picojson::value("Push_Notification_Listener");
154 picojson::value::object pushMessage;
155 pushMessage["appData"] = picojson::value(appData);
156 pushMessage["alertMessage"] = picojson::value(alertMessage);
157 pushMessage["date"] = picojson::value(date);
158 dict["pushMessage"] = picojson::value(pushMessage);
159 picojson::value resultListener(dict);
160 PostMessage(resultListener.serialize().c_str());
163 void PushInstance::onDeregister(double callbackId,
164 common::PlatformResult result) {
166 picojson::value::object dict;
167 dict["callbackId"] = picojson::value(callbackId);
168 if (result.IsError()) {
169 dict["error"] = result.ToJSON();
171 picojson::value res(dict);
172 PostMessage(res.serialize().c_str());
175 PushInstance::~PushInstance() {
180 } // namespace extension