From fb1e34fb88ebe53fdf8941268778f529385627de Mon Sep 17 00:00:00 2001 From: Przemyslaw Ciezkowski Date: Wed, 11 Feb 2015 15:06:55 +0100 Subject: [PATCH] [Push] Implementation JS Change-Id: I3b717b2a179e4b31d7a1badae53468c343735582 Signed-off-by: Przemyslaw Ciezkowski --- src/push/push_api.js | 107 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 101 insertions(+), 6 deletions(-) diff --git a/src/push/push_api.js b/src/push/push_api.js index ba8f49d4..0e936d7e 100644 --- a/src/push/push_api.js +++ b/src/push/push_api.js @@ -7,6 +7,26 @@ var native = new xwalk.utils.NativeManager(extension); var validator = xwalk.utils.validator; +var validatorType = xwalk.utils.type; + + +/** + * @const + * @type {string} + */ +var NOTIFICATION_LISTENER = 'Push_Notification_Listener'; + +function PushMessage(dict) { + for (var key in dict) { + if (dict.hasOwnProperty(key)) { + Object.defineProperty(this, key, { + value: dict[key], + enumerable: true + }); + } + } + Object.freeze(this); +} @@ -20,27 +40,102 @@ function PushManager() { } PushManager.prototype.registerService = function(appControl, successCallback, errorCallback) { - + var data = validator.validateArgs(arguments, [ + { + name: 'appControl', + type: validator.Types.PLATFORM_OBJECT, + values: tizen.ApplicationControl + }, + { + name: 'successCallback', + type: validator.Types.FUNCTION + }, + { + name: 'errorCallback', + type: validator.Types.FUNCTION, + optional: true, + nullable: true + } + ]); + native.call('Push_registerService', { + operation: data.appControl.operation, + uri: data.appControl.uri, + mime: data.appControl.mime, + data: data.appControl.data + }, function(msg) { + if (msg.error) { + if (validatorType.isFunction(data.errorCallback)) { + data.errorCallback(native.getErrorObject(msg.error)); + } + } else { + data.successCallback(msg.registrationId); + } + }); }; PushManager.prototype.unregisterService = function(successCallback, errorCallback) { - + var data = validator.validateArgs(arguments, [ + { + name: 'successCallback', + type: validator.Types.FUNCTION, + optional: true, + nullable: true + }, + { + name: 'errorCallback', + type: validator.Types.FUNCTION, + optional: true, + nullable: true + } + ]); + native.call('Push_unregisterService', {}, function(msg) { + if (msg.error) { + if (validatorType.isFunction(data.errorCallback)) { + data.errorCallback(native.getErrorObject(msg.error)); + } + } else if (validatorType.isFunction(data.successCallback)) { + data.successCallback(); + } + }); }; PushManager.prototype.connectService = function(notificationCallback) { - + var data = validator.validateArgs(arguments, [ + { + name: 'notificationCallback', + type: validator.Types.FUNCTION + } + ]); + var ret = native.callSync('Push_connectService', {}); + if (native.isFailure(ret)) { + throw native.getErrorObject(ret); + } + native.addListener(NOTIFICATION_LISTENER, function(msg) { + data.notificationCallback(new PushMessage(msg.pushMessage)); + }); }; PushManager.prototype.disconnectService = function() { - + var ret = native.callSync('Push_disconnectService', {}); + if (native.isFailure(ret)) { + throw native.getErrorObject(ret); + } + native.removeListener(NOTIFICATION_LISTENER); }; PushManager.prototype.getRegistrationId = function() { - + var ret = native.callSync('Push_getRegistrationId', {}); + if (native.isFailure(ret)) { + throw native.getErrorObject(ret); + } + return native.getResultObject(ret); }; PushManager.prototype.getUnreadNotifications = function() { - + var ret = native.callSync('Push_getUnreadNotifications', {}); + if (native.isFailure(ret)) { + throw native.getErrorObject(ret); + } }; exports = new PushManager(); -- 2.34.1