2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include "push/push_instance.h"
20 #include "common/logger.h"
21 #include "common/tools.h"
22 #include "push/push_manager.h"
29 const std::string kPrivilegePush = "http://tizen.org/privilege/push";
33 PushInstance::PushInstance(): m_ignoreNotificationEvents(true) {
35 using std::placeholders::_1;
36 using std::placeholders::_2;
38 #define REGISTER_ASYNC(c, func) \
39 RegisterSyncHandler(c, func);
40 #define REGISTER_SYNC(c, func) \
41 RegisterSyncHandler(c, func);
43 REGISTER_ASYNC("Push_registerApplication",
44 std::bind(&PushInstance::registerApplication, this, _1, _2));
45 REGISTER_ASYNC("Push_unregisterApplication",
46 std::bind(&PushInstance::unregisterApplication, this, _1, _2));
47 REGISTER_SYNC("Push_connectService",
48 std::bind(&PushInstance::connectService, this, _1, _2));
49 REGISTER_SYNC("Push_disconnectService",
50 std::bind(&PushInstance::disconnectService, this, _1, _2));
51 REGISTER_SYNC("Push_getRegistrationId",
52 std::bind(&PushInstance::getRegistrationId, this, _1, _2));
53 REGISTER_SYNC("Push_getUnreadNotifications",
54 std::bind(&PushInstance::getUnreadNotifications, this, _1, _2));
55 REGISTER_SYNC("Push_getPushMessage",
56 std::bind(&PushInstance::getPushMessage, this, _1, _2));
57 PushManager::getInstance().setListener(this);
63 void PushInstance::registerApplication(const picojson::value& args,
64 picojson::object& out) {
67 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
68 common::PlatformResult result = PushManager::getInstance().registerApplication(
69 args.get("callbackId").get<double>());
70 if (result.IsError()) {
71 LogAndReportError(result, &out, ("Error occured"));
73 picojson::value result;
74 ReportSuccess(result, out);
78 void PushInstance::unregisterApplication(const picojson::value& args,
79 picojson::object& out) {
82 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
84 common::PlatformResult result = PushManager::getInstance()
85 .unregisterApplication(args.get("callbackId").get<double>());
86 if (result.IsError()) {
87 LogAndReportError(result, &out, ("Error occured"));
90 ReportSuccess(res, out);
94 void PushInstance::connectService(const picojson::value& args,
95 picojson::object& out) {
98 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
100 m_ignoreNotificationEvents = false;
101 picojson::value result;
102 ReportSuccess(result, out);
105 void PushInstance::disconnectService(const picojson::value& args,
106 picojson::object& out) {
109 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
111 m_ignoreNotificationEvents = true;
112 picojson::value result;
113 ReportSuccess(result, out);
116 void PushInstance::getRegistrationId(const picojson::value& args,
117 picojson::object& out) {
120 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
123 common::PlatformResult result = PushManager::getInstance()
124 .getRegistrationId(id);
125 if (result.IsError()) {
126 // this method should fail silently and return null
127 picojson::value res = picojson::value();
128 ReportSuccess(res, out);
130 picojson::value res(id);
131 ReportSuccess(res, out);
135 void PushInstance::getUnreadNotifications(const picojson::value& args,
136 picojson::object& out) {
139 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
141 common::PlatformResult result = PushManager::getInstance()
142 .getUnreadNotifications();
143 if (result.IsError()) {
144 LogAndReportError(result, &out, ("Error occured"));
147 ReportSuccess(res, out);
151 void PushInstance::getPushMessage(const picojson::value& args,
152 picojson::object& out) {
155 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
158 common::PlatformResult result = PushManager::getInstance().getPushMessage(&msg);
160 if (result.IsError()) {
161 LoggerE("Error occurred");
162 ReportError(result, &out);
164 ReportSuccess(msg, out);
168 void PushInstance::onPushRegister(double callbackId,
169 common::PlatformResult result, const std::string& id) {
171 picojson::value::object dict;
172 dict["callbackId"] = picojson::value(callbackId);
173 if (result.IsError()) {
174 dict["error"] = result.ToJSON();
176 dict["registrationId"] = picojson::value(id);
178 picojson::value res(dict);
179 Instance::PostMessage(this, res.serialize().c_str());
182 void PushInstance::onPushNotify(push_service_notification_h noti) {
184 if (m_ignoreNotificationEvents) {
185 LoggerD("Listener not set, ignoring event");
187 picojson::value::object dict;
188 picojson::value::object pushMessage;
189 PushManager::getInstance().notificationToJson(noti, &pushMessage);
191 dict["listenerId"] = picojson::value("Push_Notification_Listener");
192 dict["pushMessage"] = picojson::value(pushMessage);
193 picojson::value resultListener(dict);
194 Instance::PostMessage(this, resultListener.serialize().c_str());
197 void PushInstance::onDeregister(double callbackId,
198 common::PlatformResult result) {
200 picojson::value::object dict;
201 dict["callbackId"] = picojson::value(callbackId);
202 if (result.IsError()) {
203 dict["error"] = result.ToJSON();
205 picojson::value res(dict);
206 Instance::PostMessage(this, res.serialize().c_str());
209 PushInstance::~PushInstance() {
211 PushManager::getInstance().setListener(nullptr);
215 } // namespace extension