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() {
35 using std::placeholders::_1;
36 using std::placeholders::_2;
38 #define REGISTER_ASYNC(c, func) RegisterSyncHandler(c, func);
39 #define REGISTER_SYNC(c, func) RegisterSyncHandler(c, func);
41 REGISTER_ASYNC("Push_registerService", std::bind(&PushInstance::registerService, this, _1, _2));
42 REGISTER_ASYNC("Push_registerApplication",
43 std::bind(&PushInstance::registerApplication, this, _1, _2));
44 REGISTER_ASYNC("Push_unregisterService",
45 std::bind(&PushInstance::unregisterService, this, _1, _2));
46 REGISTER_ASYNC("Push_unregisterApplication",
47 std::bind(&PushInstance::unregisterApplication, this, _1, _2));
48 REGISTER_SYNC("Push_connectService", std::bind(&PushInstance::connectService, this, _1, _2));
49 REGISTER_SYNC("Push_connect", std::bind(&PushInstance::connect, this, _1, _2));
50 REGISTER_SYNC("Push_disconnectService",
51 std::bind(&PushInstance::disconnectService, this, _1, _2));
52 REGISTER_SYNC("Push_disconnect", std::bind(&PushInstance::disconnect, this, _1, _2));
53 REGISTER_SYNC("Push_getRegistrationId",
54 std::bind(&PushInstance::getRegistrationId, this, _1, _2));
55 REGISTER_SYNC("Push_getUnreadNotifications",
56 std::bind(&PushInstance::getUnreadNotifications, this, _1, _2));
57 REGISTER_SYNC("Push_getPushMessage", std::bind(&PushInstance::getPushMessage, this, _1, _2));
62 impl = new PushManager(this);
65 void PushInstance::registerService(const picojson::value& args, picojson::object& out) {
68 "DEPRECATION WARNING: registerService() is deprecated and will be removed from next release. "
69 "Use register() instead.");
71 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
72 common::PlatformResult result = impl->registerService(args.get("callbackId").get<double>());
73 if (result.IsError()) {
74 LogAndReportError(result, &out, ("Error occured"));
80 void PushInstance::registerApplication(const picojson::value& args, picojson::object& out) {
83 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
84 common::PlatformResult result = impl->registerApplication(args.get("callbackId").get<double>());
85 if (result.IsError()) {
86 LogAndReportError(result, &out, ("Error occured"));
92 void PushInstance::unregisterService(const picojson::value& args, picojson::object& out) {
95 "DEPRECATION WARNING: unregisterService() is deprecated and will be removed from next "
96 "release. Use unregister() instead.");
98 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
100 common::PlatformResult result = impl->unregisterService(args.get("callbackId").get<double>());
101 if (result.IsError()) {
102 LogAndReportError(result, &out, ("Error occured"));
108 void PushInstance::unregisterApplication(const picojson::value& args, picojson::object& out) {
111 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
113 common::PlatformResult result = impl->unregisterApplication(args.get("callbackId").get<double>());
114 if (result.IsError()) {
115 LogAndReportError(result, &out, ("Error occured"));
121 void PushInstance::connectService(const picojson::value& args, picojson::object& out) {
124 "DEPRECATION WARNING: connectService() is deprecated and will be removed from next release. "
125 "Use connect() instead.");
127 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
129 common::PlatformResult result = impl->connectService();
130 if (result.IsError()) {
131 LogAndReportError(result, &out, ("Error while connect service"));
137 void PushInstance::connect(const picojson::value& args, picojson::object& out) {
140 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
142 common::PlatformResult result = impl->connect();
143 if (result.IsError()) {
144 LogAndReportError(result, &out, ("Error while connect service"));
150 void PushInstance::disconnectService(const picojson::value& args, picojson::object& out) {
153 "DEPRECATION WARNING: disconnectService() is deprecated and will be removed from next "
154 "release. Use disconnect() instead.");
156 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
158 common::PlatformResult result = impl->disconnectService();
159 if (result.IsError()) {
160 LogAndReportError(result, &out, ("Error while disconnect service"));
166 void PushInstance::disconnect(const picojson::value& args, picojson::object& out) {
169 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
171 common::PlatformResult result = impl->disconnect();
172 if (result.IsError()) {
173 LogAndReportError(result, &out, ("Error while disconnect service"));
179 void PushInstance::getRegistrationId(const picojson::value& args, picojson::object& out) {
182 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
185 common::PlatformResult result = impl->getRegistrationId(id);
186 if (result.IsError()) {
187 // this method should fail silently and return null
188 picojson::value res = picojson::value();
189 ReportSuccess(res, out);
191 picojson::value res(id);
192 ReportSuccess(res, out);
196 void PushInstance::getUnreadNotifications(const picojson::value& args, picojson::object& out) {
199 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
201 common::PlatformResult result = impl->getUnreadNotifications();
202 if (result.IsError()) {
203 LogAndReportError(result, &out, ("Error occured"));
209 void PushInstance::getPushMessage(const picojson::value& args, picojson::object& out) {
212 CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
215 common::PlatformResult result = impl->getPushMessage(&msg);
217 if (result.IsError()) {
218 LoggerE("Error occurred");
219 ReportError(result, &out);
221 ReportSuccess(msg, out);
225 void PushInstance::onPushState(push_service_state_e state, common::PlatformResult result) {
227 picojson::value res{picojson::object()};
228 picojson::object& dict = res.get<picojson::object>();
230 dict["listenerId"] = picojson::value("Push_State_Listener");
231 if (result.IsError()) {
232 dict["error"] = result.ToJSON();
234 dict["state"] = picojson::value(PushManagerCommon::StateToString(state));
236 Instance::PostMessage(this, res.serialize().c_str());
239 void PushInstance::onPushRegister(double callbackId, common::PlatformResult result,
240 const std::string& id) {
242 picojson::value res{picojson::object()};
243 picojson::object& dict = res.get<picojson::object>();
245 dict["callbackId"] = picojson::value(callbackId);
246 if (result.IsError()) {
247 dict["error"] = result.ToJSON();
249 dict["registrationId"] = picojson::value(id);
251 Instance::PostMessage(this, res.serialize().c_str());
254 void PushInstance::onPushNotify(push_service_notification_h noti) {
256 picojson::value res{picojson::object()};
257 picojson::object& dict = res.get<picojson::object>();
259 picojson::value push_message{picojson::object()};
260 picojson::object& push_message_obj = push_message.get<picojson::object>();
262 PushManagerCommon::notificationToJson(noti, &push_message_obj);
264 dict["listenerId"] = picojson::value("Push_Notification_Listener");
265 dict["pushMessage"] = push_message;
266 Instance::PostMessage(this, res.serialize().c_str());
269 void PushInstance::onDeregister(double callbackId, common::PlatformResult result) {
271 picojson::value res{picojson::object()};
272 picojson::object& dict = res.get<picojson::object>();
274 dict["callbackId"] = picojson::value(callbackId);
275 if (result.IsError()) {
276 dict["error"] = result.ToJSON();
278 Instance::PostMessage(this, res.serialize().c_str());
281 PushInstance::~PushInstance() {
290 } // namespace extension