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 picojson::value result;
76 ReportSuccess(result, out);
79 void PushInstance::connectService(const picojson::value& args,
80 picojson::object& out) {
82 m_ignoreNotificationEvents = false;
83 picojson::value result;
84 ReportSuccess(result, out);
87 void PushInstance::disconnectService(const picojson::value& args,
88 picojson::object& out) {
90 m_ignoreNotificationEvents = true;
91 picojson::value result;
92 ReportSuccess(result, out);
95 void PushInstance::getRegistrationId(const picojson::value& args,
96 picojson::object& out) {
98 picojson::value result;
99 ReportSuccess(result, out);
102 void PushInstance::getUnreadNotifications(const picojson::value& args,
103 picojson::object& out) {
105 picojson::value result;
106 ReportSuccess(result, out);
109 void PushInstance::onPushRegister(double callbackId,
110 common::PlatformResult result, const std::string& id) {
112 picojson::value::object dict;
113 dict["callbackId"] = picojson::value(callbackId);
114 if (result.IsError()) {
115 dict["error"] = result.ToJSON();
117 dict["registrationId"] = picojson::value(id);
119 picojson::value res(dict);
120 PostMessage(res.serialize().c_str());
123 void PushInstance::onPushNotify(const std::string& appData,
124 const std::string& alertMessage, double date) {
126 if (m_ignoreNotificationEvents) {
127 LoggerD("Listener not set, ignoring event");
129 picojson::value::object dict;
130 dict["listenerId"] = picojson::value("Push_Notification_Listener");
131 picojson::value::object pushMessage;
132 pushMessage["appData"] = picojson::value(appData);
133 pushMessage["alertMessage"] = picojson::value(alertMessage);
134 pushMessage["date"] = picojson::value(date);
135 dict["pushMessage"] = picojson::value(pushMessage);
136 picojson::value resultListener(dict);
137 PostMessage(resultListener.serialize().c_str());
140 PushInstance::~PushInstance() {
145 } // namespace extension