const std::string kPrivilegePush = "http://tizen.org/privilege/push";
-} // namespace
-
-PushInstance::PushInstance(): m_ignoreNotificationEvents(true) {
- LoggerD("Enter");
- using std::placeholders::_1;
- using std::placeholders::_2;
-
- #define REGISTER_ASYNC(c, func) \
- RegisterSyncHandler(c, func);
- #define REGISTER_SYNC(c, func) \
- RegisterSyncHandler(c, func);
-
- REGISTER_ASYNC("Push_registerService",
- std::bind(&PushInstance::registerService, this, _1, _2));
- REGISTER_ASYNC("Push_unregisterService",
- std::bind(&PushInstance::unregisterService, this, _1, _2));
- REGISTER_SYNC("Push_connectService",
- std::bind(&PushInstance::connectService, this, _1, _2));
- REGISTER_SYNC("Push_disconnectService",
- std::bind(&PushInstance::disconnectService, this, _1, _2));
- REGISTER_SYNC("Push_getRegistrationId",
- std::bind(&PushInstance::getRegistrationId, this, _1, _2));
- REGISTER_SYNC("Push_getUnreadNotifications",
- std::bind(&PushInstance::getUnreadNotifications, this, _1, _2));
- PushManager::getInstance().setListener(this);
-
- #undef REGISTER_ASYNC
- #undef REGISTER_SYNC
-}
-
-void PushInstance::registerService(const picojson::value& args,
- picojson::object& out) {
- LoggerD("Enter");
-
- CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
-
- PushManager::ApplicationControl appControl;
- appControl.operation = args.get("operation").get<std::string>();
- if (args.get("uri").is<std::string>()) {
- appControl.uri = args.get("uri").get<std::string>();
- }
- if (args.get("mime").is<std::string>()) {
- appControl.mime = args.get("mime").get<std::string>();
- }
- if (args.get("category").is<std::string>()) {
- appControl.category = args.get("category").get<std::string>();
- }
- if (args.get("data").is<picojson::null>() == false) {
- std::vector<picojson::value> dataArray =
- args.get("data").get<picojson::array>();
- for (auto &item : dataArray) {
- std::string key = item.get("key").get<std::string>();
- std::vector<picojson::value> values =
- item.get("value").get<picojson::array>();
- for (auto &value : values) {
- appControl.data[key].push_back(value.to_str());
- }
- }
- }
- common::PlatformResult result = PushManager::getInstance().registerService(
- appControl,
- args.get("callbackId").get<double>());
- if (result.IsError()) {
- LogAndReportError(result, &out, ("Error occured"));
- } else {
- picojson::value result;
- ReportSuccess(result, out);
- }
-}
-
-void PushInstance::unregisterService(const picojson::value& args,
- picojson::object& out) {
- LoggerD("Enter");
-
- CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
-
- common::PlatformResult result = PushManager::getInstance()
- .unregisterService(args.get("callbackId").get<double>());
- if (result.IsError()) {
- LogAndReportError(result, &out, ("Error occured"));
- } else {
- picojson::value res;
- ReportSuccess(res, out);
- }
-}
-
-void PushInstance::connectService(const picojson::value& args,
- picojson::object& out) {
- LoggerD("Enter");
-
- CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
-
- m_ignoreNotificationEvents = false;
- picojson::value result;
- ReportSuccess(result, out);
-}
-
-void PushInstance::disconnectService(const picojson::value& args,
- picojson::object& out) {
- LoggerD("Enter");
-
- CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
-
- m_ignoreNotificationEvents = true;
- picojson::value result;
- ReportSuccess(result, out);
-}
-
-void PushInstance::getRegistrationId(const picojson::value& args,
- picojson::object& out) {
- LoggerD("Enter");
-
- CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
-
- std::string id;
- common::PlatformResult result = PushManager::getInstance()
- .getRegistrationId(id);
- if (result.IsError()) {
- // this method should fail silently and return null
- picojson::value res = picojson::value();
- ReportSuccess(res, out);
- } else {
- picojson::value res(id);
- ReportSuccess(res, out);
- }
-}
-
-void PushInstance::getUnreadNotifications(const picojson::value& args,
- picojson::object& out) {
- LoggerD("Enter");
-
- CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
-
- common::PlatformResult result = PushManager::getInstance()
- .getUnreadNotifications();
- if (result.IsError()) {
- LogAndReportError(result, &out, ("Error occured"));
- } else {
- picojson::value res;
- ReportSuccess(res, out);
- }
-}
-
-void PushInstance::onPushRegister(double callbackId,
- common::PlatformResult result, const std::string& id) {
- LoggerD("Enter");
- picojson::value::object dict;
- dict["callbackId"] = picojson::value(callbackId);
- if (result.IsError()) {
- dict["error"] = result.ToJSON();
- } else {
- dict["registrationId"] = picojson::value(id);
- }
- picojson::value res(dict);
- Instance::PostMessage(this, res.serialize().c_str());
-}
-
-void PushInstance::onPushNotify(const std::string& appData,
- const std::string& alertMessage, double date) {
- LoggerD("Enter");
- if (m_ignoreNotificationEvents) {
- LoggerD("Listener not set, ignoring event");
- }
- picojson::value::object dict;
- dict["listenerId"] = picojson::value("Push_Notification_Listener");
- picojson::value::object pushMessage;
- pushMessage["appData"] = picojson::value(appData);
- pushMessage["alertMessage"] = picojson::value(alertMessage);
- pushMessage["date"] = picojson::value(date);
- dict["pushMessage"] = picojson::value(pushMessage);
- picojson::value resultListener(dict);
- Instance::PostMessage(this, resultListener.serialize().c_str());
-}
-
-void PushInstance::onDeregister(double callbackId,
- common::PlatformResult result) {
- LoggerD("Enter");
- picojson::value::object dict;
- dict["callbackId"] = picojson::value(callbackId);
- if (result.IsError()) {
- dict["error"] = result.ToJSON();
- }
- picojson::value res(dict);
- Instance::PostMessage(this, res.serialize().c_str());
+} // namespace
+
+PushInstance::PushInstance() {
+ ScopeLogger();
+ using std::placeholders::_1;
+ using std::placeholders::_2;
+
+#define REGISTER_METHOD(M) \
+ RegisterSyncHandler(#M, std::bind(&PushInstance::M, this, _1, _2))
+ REGISTER_METHOD(PushRegisterService);
+ REGISTER_METHOD(PushRegisterApplication);
+ REGISTER_METHOD(PushUnregisterService);
+ REGISTER_METHOD(PushUnregisterApplication);
+ REGISTER_METHOD(PushConnectService);
+ REGISTER_METHOD(PushConnect);
+ REGISTER_METHOD(PushDisconnectService);
+ REGISTER_METHOD(PushDisconnect);
+ REGISTER_METHOD(PushGetRegistrationId);
+ REGISTER_METHOD(PushGetUnreadNotifications);
+ REGISTER_METHOD(PushGetPushMessage);
+#undef REGISTER_METHOD
+
+ impl = new PushManager(this);
+}
+
+void PushInstance::PushRegisterService(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ LoggerW(
+ "DEPRECATION WARNING: registerService() is deprecated and will be removed from next release. "
+ "Use register() instead.");
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+ common::PlatformResult result = impl->registerService(args.get("callbackId").get<double>());
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error occured"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushRegisterApplication(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+ common::PlatformResult result = impl->registerApplication(args.get("callbackId").get<double>());
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error occured"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushUnregisterService(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ LoggerW(
+ "DEPRECATION WARNING: unregisterService() is deprecated and will be removed from next "
+ "release. Use unregister() instead.");
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->unregisterService(args.get("callbackId").get<double>());
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error occured"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushUnregisterApplication(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->unregisterApplication(args.get("callbackId").get<double>());
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error occured"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushConnectService(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ LoggerW(
+ "DEPRECATION WARNING: connectService() is deprecated and will be removed from next release. "
+ "Use connect() instead.");
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->connectService();
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error while connect service"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushConnect(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->connect();
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error while connect service"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushDisconnectService(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+ LoggerW(
+ "DEPRECATION WARNING: disconnectService() is deprecated and will be removed from next "
+ "release. Use disconnect() instead.");
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->disconnectService();
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error while disconnect service"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushDisconnect(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->disconnect();
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error while disconnect service"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushGetRegistrationId(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ std::string id;
+ common::PlatformResult result = impl->getRegistrationId(id);
+ if (result.IsError()) {
+ // this method should fail silently and return null
+ picojson::value res = picojson::value();
+ ReportSuccess(res, out);
+ } else {
+ picojson::value res(id);
+ ReportSuccess(res, out);
+ }
+}
+
+void PushInstance::PushGetUnreadNotifications(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ common::PlatformResult result = impl->getUnreadNotifications();
+ if (result.IsError()) {
+ LogAndReportError(result, &out, ("Error occured"));
+ } else {
+ ReportSuccess(out);
+ }
+}
+
+void PushInstance::PushGetPushMessage(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ CHECK_PRIVILEGE_ACCESS(kPrivilegePush, &out);
+
+ picojson::value msg;
+ common::PlatformResult result = impl->getPushMessage(&msg);
+
+ if (result.IsError()) {
+ LoggerE("Error occurred");
+ ReportError(result, &out);
+ } else {
+ ReportSuccess(msg, out);
+ }
+}
+
+void PushInstance::onPushState(push_service_state_e state, common::PlatformResult result) {
+ ScopeLogger();
+ picojson::value res{picojson::object()};
+ picojson::object& dict = res.get<picojson::object>();
+
+ dict["listenerId"] = picojson::value("Push_State_Listener");
+ if (result.IsError()) {
+ dict["error"] = result.ToJSON();
+ } else {
+ dict["state"] = picojson::value(PushManagerCommon::StateToString(state));
+ }
+ Instance::PostMessage(this, res.serialize().c_str());
+}
+
+void PushInstance::onPushRegister(double callbackId, common::PlatformResult result,
+ const std::string& id) {
+ ScopeLogger();
+ picojson::value res{picojson::object()};
+ picojson::object& dict = res.get<picojson::object>();
+
+ dict["callbackId"] = picojson::value(callbackId);
+ if (result.IsError()) {
+ dict["error"] = result.ToJSON();
+ } else {
+ dict["registrationId"] = picojson::value(id);
+ }
+ Instance::PostMessage(this, res.serialize().c_str());
+}
+
+void PushInstance::onPushNotify(push_service_notification_h noti) {
+ ScopeLogger();
+ picojson::value res{picojson::object()};
+ picojson::object& dict = res.get<picojson::object>();
+
+ picojson::value push_message{picojson::object()};
+ picojson::object& push_message_obj = push_message.get<picojson::object>();
+
+ PushManagerCommon::notificationToJson(noti, &push_message_obj);
+
+ dict["listenerId"] = picojson::value("Push_Notification_Listener");
+ dict["pushMessage"] = push_message;
+ Instance::PostMessage(this, res.serialize().c_str());
+}
+
+void PushInstance::onDeregister(double callbackId, common::PlatformResult result) {
+ ScopeLogger();
+ picojson::value res{picojson::object()};
+ picojson::object& dict = res.get<picojson::object>();
+
+ dict["callbackId"] = picojson::value(callbackId);
+ if (result.IsError()) {
+ dict["error"] = result.ToJSON();
+ }
+ Instance::PostMessage(this, res.serialize().c_str());
}
PushInstance::~PushInstance() {
- LoggerD("Enter");
+ ScopeLogger();
+ if (impl) {
+ delete impl;
+ impl = nullptr;
+ }
}
} // namespace push