From: Przemyslaw Ciezkowski
Date: Thu, 12 Feb 2015 12:41:09 +0000 (+0100)
Subject: [Push] connectService
X-Git-Tag: submit/tizen_tv/20150603.064601~1^2~400
X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a128f5dbf81da0751a8c2ac64059ba948e0672a;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git
[Push] connectService
Change-Id: I52989b6826c50f54e19b280ac35cb451ac0d7dc9
Signed-off-by: Przemyslaw Ciezkowski
---
diff --git a/packaging/webapi-plugins.spec b/packaging/webapi-plugins.spec
index 392686c9..f797c65c 100755
--- a/packaging/webapi-plugins.spec
+++ b/packaging/webapi-plugins.spec
@@ -209,6 +209,7 @@ BuildRequires: pkgconfig(capi-system-power)
%if 0%{?tizen_feature_power_support}
BuildRequires: pkgconfig(push)
BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(libpcrecpp)
%endif
%if 0%{?tizen_feature_tv_display_support}
diff --git a/src/push/push.gyp b/src/push/push.gyp
index 7e57a01f..11922305 100644
--- a/src/push/push.gyp
+++ b/src/push/push.gyp
@@ -24,6 +24,7 @@
'packages': [
'push',
'capi-appfw-application',
+ 'libpcrecpp',
]
},
}],
diff --git a/src/push/push_api.js b/src/push/push_api.js
index 3c632b01..caaff7a5 100644
--- a/src/push/push_api.js
+++ b/src/push/push_api.js
@@ -20,7 +20,7 @@ function PushMessage(dict) {
for (var key in dict) {
if (dict.hasOwnProperty(key)) {
Object.defineProperty(this, key, {
- value: dict[key],
+ value: key === 'date' ? new Date(dict[key] * 1000) : dict[key],
enumerable: true
});
}
diff --git a/src/push/push_instance.cc b/src/push/push_instance.cc
index e01de2df..d6edec32 100644
--- a/src/push/push_instance.cc
+++ b/src/push/push_instance.cc
@@ -11,7 +11,8 @@
namespace extension {
namespace push {
-PushInstance::PushInstance() {
+PushInstance::PushInstance():
+ m_ignoreNotificationEvents(true) {
LoggerD("Enter");
using std::placeholders::_1;
using std::placeholders::_2;
@@ -19,7 +20,7 @@ PushInstance::PushInstance() {
std::bind(&PushInstance::registerService, this, _1, _2));
RegisterHandler("Push_unregisterService",
std::bind(&PushInstance::unregisterService, this, _1, _2));
- RegisterHandler("Push_connectService",
+ RegisterSyncHandler("Push_connectService",
std::bind(&PushInstance::connectService, this, _1, _2));
RegisterSyncHandler("Push_disconnectService",
std::bind(&PushInstance::disconnectService, this, _1, _2));
@@ -78,6 +79,7 @@ void PushInstance::unregisterService(const picojson::value& args,
void PushInstance::connectService(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
+ m_ignoreNotificationEvents = false;
picojson::value result;
ReportSuccess(result, out);
}
@@ -85,6 +87,7 @@ void PushInstance::connectService(const picojson::value& args,
void PushInstance::disconnectService(const picojson::value& args,
picojson::object& out) {
LoggerD("Enter");
+ m_ignoreNotificationEvents = true;
picojson::value result;
ReportSuccess(result, out);
}
@@ -117,6 +120,23 @@ void PushInstance::onPushRegister(double callbackId,
PostMessage(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);
+ PostMessage(resultListener.serialize().c_str());
+}
+
PushInstance::~PushInstance() {
LoggerD("Enter");
}
diff --git a/src/push/push_instance.h b/src/push/push_instance.h
index d110630b..70e23116 100644
--- a/src/push/push_instance.h
+++ b/src/push/push_instance.h
@@ -18,6 +18,9 @@ class PushInstance: public common::ParsedInstance, public EventListener {
virtual ~PushInstance();
virtual void onPushRegister(double callbackId,
common::PlatformResult result, const std::string& id);
+ virtual void onPushNotify(const std::string& appData,
+ const std::string& alertMessage, double date);
+
private:
void registerService(const picojson::value& args, picojson::object& out);
void unregisterService(const picojson::value& args, picojson::object& out);
@@ -26,6 +29,8 @@ class PushInstance: public common::ParsedInstance, public EventListener {
void getRegistrationId(const picojson::value& args, picojson::object& out);
void getUnreadNotifications(const picojson::value& args,
picojson::object& out);
+
+ bool m_ignoreNotificationEvents;
};
} // namespace push
diff --git a/src/push/push_manager.cc b/src/push/push_manager.cc
index 3b3d733d..41d145df 100644
--- a/src/push/push_manager.cc
+++ b/src/push/push_manager.cc
@@ -4,6 +4,7 @@
#include "push/push_manager.h"
#include
+#include
#include
#include
#include "common/logger.h"
@@ -175,6 +176,48 @@ void PushManager::onPushState(push_state_e state, const char* err,
void PushManager::onPushNotify(push_notification_h noti, void* user_data) {
LoggerD("Enter");
+ if (!getInstance().m_listener) {
+ LoggerW("Listener not set, ignoring");
+ return;
+ }
+
+ char* temp = NULL;
+ int ret = push_get_notification_data(noti, &temp);
+ if (ret != PUSH_ERROR_NONE) {
+ LoggerE("Failed to get appData");
+ return;
+ }
+ std::string appData = temp;
+ free(temp);
+
+ temp = NULL;
+ ret = push_get_notification_message(noti, &temp);
+ if (ret != PUSH_ERROR_NONE) {
+ LoggerE("Failed to get message");
+ return;
+ }
+
+ // parse query string and find value for alertMessage
+ pcrecpp::StringPiece input(temp);
+ pcrecpp::RE re("([^=]+)=([^&]*)&?");
+ string key;
+ string value;
+ std::string alertMessage;
+ while (re.Consume(&input, &key, &value)) {
+ if (key == "alertMessage") {
+ alertMessage = value;
+ break;
+ }
+ }
+ free(temp);
+
+ int64_t date = -1;
+ ret = push_get_notification_time(noti, &date);
+ if (ret != PUSH_ERROR_NONE) {
+ LoggerE("Failed to get date");
+ return;
+ }
+ getInstance().m_listener->onPushNotify(appData, alertMessage, date);
}
void PushManager::onPushRegister(push_result_e result, const char* msg,
diff --git a/src/push/push_manager.h b/src/push/push_manager.h
index 58819fc8..f45876ae 100644
--- a/src/push/push_manager.h
+++ b/src/push/push_manager.h
@@ -18,6 +18,8 @@ class EventListener {
public:
virtual void onPushRegister(double callbackId,
common::PlatformResult result, const std::string& id) = 0;
+ virtual void onPushNotify(const std::string& appData,
+ const std::string& alertMessage, double date) = 0;
virtual ~EventListener() {}
};