[Push] Implementation JS
authorPrzemyslaw Ciezkowski <p.ciezkowski@samsung.com>
Wed, 11 Feb 2015 14:06:55 +0000 (15:06 +0100)
committerPawel Andruszkiewicz <p.andruszkie@samsung.com>
Fri, 13 Feb 2015 15:24:22 +0000 (00:24 +0900)
Change-Id: I3b717b2a179e4b31d7a1badae53468c343735582
Signed-off-by: Przemyslaw Ciezkowski <p.ciezkowski@samsung.com>
src/push/push_api.js

index ba8f49d49ac35a375c7c3c4efd1663d1251ac93d..0e936d7e5f73f69fbd9591862076cac1f287c1f8 100644 (file)
@@ -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();