[Push] connectService
[platform/core/api/webapi-plugins.git] / src / push / push_instance.cc
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.
4
5 #include "push/push_instance.h"
6 #include <string>
7 #include <vector>
8 #include "common/logger.h"
9 #include "push/push_manager.h"
10
11 namespace extension {
12 namespace push {
13
14 PushInstance::PushInstance():
15         m_ignoreNotificationEvents(true) {
16     LoggerD("Enter");
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);
32 }
33
34 void PushInstance::registerService(const picojson::value& args,
35         picojson::object& out) {
36     LoggerD("Enter");
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>();
41     }
42     if (args.get("mime").is<std::string>()) {
43         appControl.mime = args.get("mime").get<std::string>();
44     }
45     if (args.get("category").is<std::string>()) {
46         appControl.category = args.get("category").get<std::string>();
47     }
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());
57             }
58         }
59     }
60     common::PlatformResult result = PushManager::getInstance().registerService(
61             appControl,
62             args.get("callbackId").get<double>());
63     if (result.IsError()) {
64         LoggerE("Error occured");
65         ReportError(result, &out);
66     } else {
67         picojson::value result;
68         ReportSuccess(result, out);
69     }
70 }
71
72 void PushInstance::unregisterService(const picojson::value& args,
73         picojson::object& out) {
74     LoggerD("Enter");
75     picojson::value result;
76     ReportSuccess(result, out);
77 }
78
79 void PushInstance::connectService(const picojson::value& args,
80         picojson::object& out) {
81     LoggerD("Enter");
82     m_ignoreNotificationEvents = false;
83     picojson::value result;
84     ReportSuccess(result, out);
85 }
86
87 void PushInstance::disconnectService(const picojson::value& args,
88         picojson::object& out) {
89     LoggerD("Enter");
90     m_ignoreNotificationEvents = true;
91     picojson::value result;
92     ReportSuccess(result, out);
93 }
94
95 void PushInstance::getRegistrationId(const picojson::value& args,
96         picojson::object& out) {
97     LoggerD("Enter");
98     picojson::value result;
99     ReportSuccess(result, out);
100 }
101
102 void PushInstance::getUnreadNotifications(const picojson::value& args,
103         picojson::object& out) {
104     LoggerD("Enter");
105     picojson::value result;
106     ReportSuccess(result, out);
107 }
108
109 void PushInstance::onPushRegister(double callbackId,
110         common::PlatformResult result, const std::string& id) {
111     LoggerD("Enter");
112     picojson::value::object dict;
113     dict["callbackId"] = picojson::value(callbackId);
114     if (result.IsError()) {
115         dict["error"] = result.ToJSON();
116     } else {
117         dict["registrationId"] = picojson::value(id);
118     }
119     picojson::value res(dict);
120     PostMessage(res.serialize().c_str());
121 }
122
123 void PushInstance::onPushNotify(const std::string& appData,
124         const std::string& alertMessage, double date) {
125     LoggerD("Enter");
126     if (m_ignoreNotificationEvents) {
127         LoggerD("Listener not set, ignoring event");
128     }
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());
138 }
139
140 PushInstance::~PushInstance() {
141     LoggerD("Enter");
142 }
143
144 }  // namespace push
145 }  // namespace extension