From: Piotr Kosko Date: Mon, 24 Oct 2016 08:33:59 +0000 (+0200) Subject: [Push] Fixing disconnect method X-Git-Tag: submit/tizen_3.0/20161102.040156~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ecc6d678168ba87ec486ca54957ddd71e8920808;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Push] Fixing disconnect method [Feature] Now disconnect method really disconnects from push server [Verification] TCT passrate didn't change. Change-Id: I18fe628e62dd4d2528e4278b5b6dec6143cde4e8 Signed-off-by: Piotr Kosko --- diff --git a/src/push/push_manager_old.cc b/src/push/push_manager_old.cc index e9a20918..b9fa0e25 100644 --- a/src/push/push_manager_old.cc +++ b/src/push/push_manager_old.cc @@ -33,6 +33,18 @@ namespace push { using common::PlatformResult; using common::ErrorCode; +#define CHECK_CONNECTION() \ + if (!m_handle) { \ + int ret = push_service_connect(m_pkgId.c_str(), onPushState, onPushNotify, this, \ + &m_handle);\ + if (ret != PUSH_SERVICE_ERROR_NONE) { \ + LoggerE("Failed to connect to push (%d)", ret);\ + }\ + m_state = PUSH_SERVICE_STATE_UNREGISTERED;\ + m_ignoreNotificationEvents = true;\ + } + + PushManagerOld::PushManagerOld(EventListener* listener) : IPushManager(listener), m_state(PUSH_SERVICE_STATE_UNREGISTERED), @@ -51,19 +63,27 @@ PushManagerOld::~PushManagerOld() { PlatformResult PushManagerOld::connectService() { LoggerD("Enter"); + CHECK_CONNECTION(); m_ignoreNotificationEvents = false; return common::PlatformResult(ErrorCode::NO_ERROR); } PlatformResult PushManagerOld::disconnectService() { LoggerD("Enter"); - m_ignoreNotificationEvents = true; + // disconnecting from push server + if (m_handle) { + push_service_disconnect(m_handle); + m_handle = nullptr; + m_state = PUSH_SERVICE_STATE_UNREGISTERED; + m_ignoreNotificationEvents = true; + } return common::PlatformResult(ErrorCode::NO_ERROR); } PlatformResult PushManagerOld::registerApplication(double callbackId) { LoggerD("Enter"); + CHECK_CONNECTION(); PushManagerHolder* holder = new PushManagerHolder{this, callbackId}; @@ -77,12 +97,27 @@ PlatformResult PushManagerOld::registerApplication(double callbackId) { return common::PlatformResult(ErrorCode::NO_ERROR); } +bool PushManagerOld::checkRegistered() { + LoggerD("Enter"); + bool result = false; + char* temp = NULL; + int ret = push_service_get_registration_id(m_handle, &temp); + if (ret != PUSH_SERVICE_ERROR_NONE) { + return result; + } + result = (NULL != temp ? true : false); + free(temp); + return result; +} + + common::PlatformResult PushManagerOld::unregisterApplication(double callbackId) { LoggerD("Enter"); + CHECK_CONNECTION(); PushManagerHolder* holder = new PushManagerHolder{this, callbackId}; - if (m_state == PUSH_SERVICE_STATE_UNREGISTERED) { - LoggerD("Already unregister, call unregister callback"); + if (!checkRegistered()) { + LoggerD("Already unregistered, call unregister callback"); if (!g_idle_add(onFakeDeregister, holder)) { delete holder; return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, @@ -111,6 +146,7 @@ common::PlatformResult PushManagerOld::unregisterApplication(double callbackId) common::PlatformResult PushManagerOld::getRegistrationId(std::string& id) { LoggerD("Enter"); + CHECK_CONNECTION(); char* temp = NULL; int ret = push_service_get_registration_id(m_handle, &temp); if (ret != PUSH_SERVICE_ERROR_NONE) { @@ -132,6 +168,7 @@ common::PlatformResult PushManagerOld::getRegistrationId(std::string& id) { common::PlatformResult PushManagerOld::getUnreadNotifications() { LoggerD("Enter"); + CHECK_CONNECTION(); int ret = push_service_request_unread_notification(m_handle); if (ret != PUSH_SERVICE_ERROR_NONE) { return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, @@ -143,6 +180,7 @@ common::PlatformResult PushManagerOld::getUnreadNotifications() { PlatformResult PushManagerOld::getPushMessage(picojson::value* out) { LoggerD("Enter"); + CHECK_CONNECTION(); push_service_notification_h handle = nullptr; int ret = push_service_app_control_to_notification(app_control_, operation_, diff --git a/src/push/push_manager_old.h b/src/push/push_manager_old.h index 9c9deb7c..4ff45a81 100644 --- a/src/push/push_manager_old.h +++ b/src/push/push_manager_old.h @@ -45,6 +45,7 @@ class PushManagerOld : public IPushManager { static common::ErrorCode ConvertPushError(int e); private: + bool checkRegistered(); static void onPushState(push_service_state_e state, const char *err, void *user_data); static void onPushNotify(push_service_notification_h noti, void *user_data);