var validator_ = xwalk.utils.validator;
var types_ = validator_.Types;
+var bridge = xwalk.utils.NativeBridge(extension, true);
function throwException_(err) {
throw new tizen.WebAPIException(err.code, err.name, err.message);
);
}
-/*
- *bridge is a two way communication interface
- *Example usage:
- * To send sync method:
- * var result = bridge.sync({
- * cmd: 'my_cpp_function_symbol',
- * data: {
- * name: 'My name',
- * age: 28
- * }
- * });
- * console.log(result);
- *
- * To send async method and handle response:
- * bridge.async({
- * cmd: 'my_cpp_function_symbol',
- * data: {
- * name: 'My name'
- * }
- * }).then({
- * success: function (data) {
- * var age = data.age;
- * args.successCallback(age);
- * },
- * error: function (e) {...},
- * someCallback: function (data) {...}
- * });
- *bridge.async will add special param to passed data called cid
- *that param need to be kept and returned with respons
- *To determine which callback should be invoked, response should
- *contain "action" param. Value of "action" param indicates name of
- *triggered callback.
- *Callbask are removed from listenr by defoult to prevent that behaviour
- *param "keep" should be assigned to value true
- *Example of c++ async response:
- * Simple succes with data:
- * {
- * cid: 23,
- * action: 'success',
- * data: {
- * age: 23
- * }
- * }
- * More complicated example:
- * {
- * cid: 23,
- * action: 'progress',
- * keep: true,
- * data: {
- * age: 23
- * }
- * }
- */
-var bridge = (function (extension) {
- var Callbacks = (function () {
- var _collection = {};
- var _cid = 0;
- var _next = function () {
- return (_cid += 1);
- };
-
- var CallbackManager = function () {};
-
- CallbackManager.prototype = {
- add: function (/*callbacks, cid?*/) {
- console.log('bridge', 'CallbackManager', 'add');
- var args = Array.prototype.slice.call(arguments);
- console.dir('bridge', 'CallbackManager', 'add', args);
- var c = args.shift();
- var cid = args.pop();
- if (cid) {
- if (c !== null && typeof c === 'object') {
- for (var key in c) {
- if (c.hasOwnProperty(key)) _collection[cid][key] = c[key];
- }
- }
- } else {
- cid = _next();
- _collection[cid] = c;
- }
- return cid;
- },
- remove: function (cid) {
- console.log('bridge', 'CallbackManager', 'remove');
- if (_collection[cid]) delete _collection[cid];
- },
- call: function (cid, key, args, keep) {
- console.log('bridge', 'CallbackManager', 'call');
- var callbacks = _collection[cid];
- keep = !!keep;
- if (callbacks) {
- var fn = callbacks[key];
- if (fn) {
- fn.apply(null, args);
- if (!keep) this.remove(cid)
- }
- }
- }
- };
-
- return {
- getInstance: function () {
- return this.instance || (this.instance = new CallbackManager);
- }
- };
- })();
-
-
- var Listeners = (function () {
- var _listeners = {};
- var _id = 0;
- var _next = function () {
- return (_id += 1);
- };
-
- var ListenerManager = function () {};
-
- ListenerManager.prototype = {
- add: function (l) {
- console.log('bridge', 'ListenerManager', 'add');
- var id = _next();
- _listeners[id] = l;
- return id;
- },
- resolve: function (id, action, data, keep) {
- console.log('bridge', 'ListenerManager', 'resolve');
- keep = !!keep;
- var l = _listeners[id];
- if (l) {
- var cm = Callbacks.getInstance();
- cm.call(l.cid, action, [data], keep);
- }
- return l;
- },
- remove: function (id) {
- console.log('bridge', 'ListenerManager', 'remove');
- var l = _listeners[id];
- if (l) {
- var cm = Callbacks.getInstance();
- if (l.cid) cm.remove(l.cid);
- delete _listeners[id];
- }
- }
- }
-
- return {
- getInstance: function () {
- return this.instance || (this.instance = new ListenerManager);
- }
- };
- })();
-
- var Listener = function () {
- console.log('bridge', 'Listener constructor');
- this.cid = null;
- };
- Listener.prototype = {
- then: function (c) {
- console.log('bridge', 'Listener', 'then');
- var cm = Callbacks.getInstance();
- this.cid = cm.add(c, this.cid);
- return this;
- }
- };
-
- var Bridge = function () {};
- Bridge.prototype = {
- sync: function (data) {
- console.log('bridge', 'sync');
- var result = extension.internal.sendSyncMessage(JSON.stringify(data));
- var obj = JSON.parse(result);
- if (obj.error)
- throw new tizen.WebAPIException(obj.code, obj.name, obj.message);
- return obj.result;
- },
- async: function (data) {
- console.log('bridge', 'async');
- var l = new Listener();
- data.cid = Listeners.getInstance().add(l);
- console.log('SENDING: ', JSON.stringify(data));
- setTimeout(function () {
- extension.postMessage(JSON.stringify(data));
- });
- return l;
- }
- };
-
- extension.setMessageListener(function (json) {
- /*
- *Expected response:
- *{
- * cid: 23, // callback id
- * action: 'success', // expected callback action
- * keep: false // optional param
- * data: {...} // data pased to callback
- *}
- */
-
- console.log('bridge', 'setMessageListener', json);
- var data = JSON.parse(json);
- if (data.cid && data.action) {
- Listeners.getInstance().resolve(data.cid, data.action, data.data, data.keep);
- }
- });
-
- return new Bridge;
-})(extension);
-
/**
* Specifies the Messaging service tags.
*/
bridge.async({
cmd: 'Messaging_getMessageServices',
- data: {
+ args: {
messageServiceType: args.messageServiceType
}
}).then({
bridge.async({
cmd: 'MessageService_sendMessage',
- data: {
+ args: {
message: args.message,
simIndex: args.simIndex
}
bridge.async({
cmd: 'MessageService_loadMessageBody',
- data: {
+ args: {
message: args.message
}
}).then({
bridge.async({
cmd: 'MessageService_loadMessageAttachment',
- data: {
+ args: {
attachment: args.attachment
}
}).then({
bridge.async({
cmd: 'MessageService_sync',
- data: {
+ args: {
id: self.id,
limit: args.limit || null
}
bridge.async({
cmd: 'MessageService_syncFolder',
- data: {
+ args: {
folder: args.folder,
limit: args.limit
}
bridge.sync({
cmd: 'MessageService_stopSync',
- data: {
+ args: {
opId: args.opId
}
});
bridge.async({
cmd: 'MessageStorage_addDraftMessage',
- data: {
+ args: {
message: args.message
}
}).then({
bridge.async({
cmd: 'MessageStorage_findMessages',
- data: {
+ args: {
filter: args.filter,
sort: args.sort,
limit: args.limit,
bridge.async({
cmd: 'MessageStorage_removeMessages',
- data: {
+ args: {
messages: args.messages
}
}).then({
bridge.async({
cmd: 'MessageStorage_updateMessages',
- data: {
+ args: {
messages: args.messages
}
}).then({
bridge.async({
cmd: 'MessageStorage_findConversations',
- data: {
+ args: {
filter: args.filter,
sort: args.sort,
limit: args.limit,
bridge.async({
cmd: 'MessageStorage_removeConversations',
- data: {
+ args: {
conversations: args.conversations
}
}).then({
bridge.async({
cmd: 'MessageStorage_findFolders',
- data: {
+ args: {
filter: args.filter,
sort: args.sort,
limit: args.limit,
bridge({
cmd: 'MessageStorage_addMessagesChangeListener',
- data: {
+ args: {
filter: args.filter,
listeners: listeners
}
bridge({
cmd: 'MessageStorage_addConversationsChangeListener',
- data: {
+ args: {
filter: args.filter,
listeners: listeners
}
bridge({
cmd: 'MessageStorage_addFoldersChangeListener',
- data: {
+ args: {
filter: args.filter,
listeners: listeners
}
bridge.sync({
cmd: 'MessageStorage_removeChangeListener',
- data: {
+ args: {
watchId: args.watchId
}
});