diff options
| author | Géry Debongnie <ged@odoo.com> | 2017-03-20 15:23:19 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-04-11 19:44:38 +0200 |
| commit | 2106e3dd2ecd61096d7c7531c2f18b00fb30aeea (patch) | |
| tree | 1e41a2e698ba993d9d74b6fddd699adb15642001 /addons/mail/static/src/js/chat_manager.js | |
| parent | 749d10e8b55dce94828290d7e4d6b2b6f741e9bd (diff) | |
[REF] web, *: simplify our RPC system (in JS)
The RPC system was not completely satisfactory, we decided to prepare
the future and do it properly. This commit introduces the new rpc
system, which replace the previous new one. We now simply have a
method, this._rpc, which takes a dictionary of parameters. The idea is
that depending on the parameters, it is able to add correct default
value when necessary.
For situations where we don't have the this._rpc method, we can use the
rpc.query method, which takes the same arguments, but directly calls
ajax.rpc instead of triggering up some events.
Diffstat (limited to 'addons/mail/static/src/js/chat_manager.js')
| -rw-r--r-- | addons/mail/static/src/js/chat_manager.js | 230 |
1 files changed, 145 insertions, 85 deletions
diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 9c60851cc22..3181f940e6e 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -611,9 +611,13 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { bus.on('notification', null, on_notification); this.channel_seen = _.throttle(function (channel) { - return self._rpc('mail.channel', 'channel_seen') - .args([[channel.id]]) - .exec({options: {shadow: true}}); + return self._rpc({ + model: 'mail.channel', + method: 'channel_seen', + args: [[channel.id]], + }, { + shadow: true + }); }, 3000); }, @@ -676,10 +680,12 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { domain = [['id', '<', min_message_id]].concat(domain); } - return this._rpc('mail.message', 'message_fetch') - .args([domain]) - .kwargs({limit: LIMIT, context: session.user_context}) - .exec() + return this._rpc({ + model: 'mail.message', + method: 'message_fetch', + args: [domain], + kwargs: {limit: LIMIT, context: session.user_context}, + }) .then(function (msgs) { if (!cache.all_history_loaded) { cache.all_history_loaded = msgs.length < LIMIT; @@ -704,10 +710,12 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { if (options.force_fetch || _.difference(ids.slice(0, LIMIT), loaded_msg_ids).length) { var ids_to_load = _.difference(ids, loaded_msg_ids).slice(0, LIMIT); - return this._rpc('mail.message', 'message_format') - .args([ids_to_load]) - .kwargs({context: session.user_context}) - .exec() + return this._rpc({ + model: 'mail.message', + method: 'message_format', + args: [ids_to_load], + context: session.user_context, + }) .then(function (msgs) { var processed_msgs = []; _.each(msgs, function (msg) { @@ -743,15 +751,17 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { } if ('channel_id' in options) { // post a message in a channel or execute a command - return this._rpc('mail.channel', data.command ? 'execute_command' : 'message_post') - .args([options.channel_id]) - .kwargs(_.extend(msg, { - message_type: 'comment', - content_subtype: 'html', - subtype: 'mail.mt_comment', - command: data.command, - })) - .exec(); + return this._rpc({ + model: 'mail.channel', + method: data.command ? 'execute_command' : 'message_post', + args: [options.channel_id], + kwargs: _.extend(msg, { + message_type: 'comment', + content_subtype: 'html', + subtype: 'mail.mt_comment', + command: data.command, + }), + }); } if ('model' in options && 'res_id' in options) { // post a message in a chatter @@ -763,14 +773,18 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { subtype_id: data.subtype_id, }); - return this._rpc(options.model, 'message_post') - .args([options.res_id]) - .kwargs(msg) - .exec() + return this._rpc({ + model: options.model, + method: 'message_post', + args: [options.res_id], + kwargs: msg, + }) .then(function (msg_id) { - return self._rpc('mail.message', 'message_format') - .args([msg_id]) - .exec() + return self._rpc({ + model: 'mail.message', + method: 'message_format', + args: [msg_id], + }) .then(function (msgs) { msgs[0].model = options.model; msgs[0].res_id = options.res_id; @@ -812,24 +826,30 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { // get messages for a chatter, when it doesn't know the ids (use // case is when using the full composer) var domain = [['model', '=', options.model], ['res_id', '=', options.res_id]]; - this._rpc('mail.message', 'message_fetch') - .args([domain]) - .kwargs({limit: 30}) - .exec() + this._rpc({ + model: 'mail.message', + method: 'message_fetch', + args: [domain], + kwargs: {limit: 30}, + }) .then(function (msgs) { return _.map(msgs, add_message); }); } }, toggle_star_status: function (message_id) { - return this._rpc('mail.message', 'toggle_message_starred') - .args([[message_id]]) - .exec(); + return this._rpc({ + model: 'mail.message', + method: 'toggle_message_starred', + args: [[message_id]], + }); }, unstar_all: function () { - return this._rpc('mail.message', 'unstar_all') - .args([[]]) - .exec(); + return this._rpc({ + model: 'mail.message', + method: 'unstar_all', + args: [[]] + }); }, mark_as_read: function (message_ids) { var ids = _.filter(message_ids, function (id) { @@ -838,25 +858,31 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { return !message || message.is_needaction; }); if (ids.length) { - return this._rpc('mail.message', 'set_message_done') - .args([ids]) - .exec(); + return this._rpc({ + model: 'mail.message', + method: 'set_message_done', + args: [ids], + }); } else { return $.when(); } }, mark_all_as_read: function (channel, domain) { if ((channel.id === "channel_inbox" && needaction_counter) || (channel && channel.needaction_counter)) { - return this._rpc('mail.message', 'mark_all_as_read') - .kwargs({channel_ids: channel.id !== "channel_inbox" ? [channel.id] : [], domain: domain}) - .exec(); + return this._rpc({ + model: 'mail.message', + method: 'mark_all_as_read', + kwargs: {channel_ids: channel.id !== "channel_inbox" ? [channel.id] : [], domain: domain}, + }); } return $.when(); }, undo_mark_as_read: function (message_ids, channel) { - return this._rpc('mail.message', 'mark_as_unread') - .args([message_ids, [channel.id]]) - .exec(); + return this._rpc({ + model: 'mail.message', + method: 'mark_as_unread', + args: [message_ids, [channel.id]], + }); }, mark_channel_as_seen: function (channel) { if (channel.unread_counter > 0 && channel.type !== 'static') { @@ -886,9 +912,13 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { return mention_partner_suggestions; } if (!channel.members_deferred) { - channel.members_deferred = this._rpc('mail.channel', "channel_fetch_listeners") - .args([channel.uuid]) - .exec({options: {shadow: true}}) + channel.members_deferred = this._rpc({ + model: 'mail.channel', + method: 'channel_fetch_listeners', + args: [channel.uuid], + }, { + shadow: true + }) .then(function (members) { var suggestions = []; _.each(mention_partner_suggestions, function (partners) { @@ -949,9 +979,13 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { }, detach_channel: function (channel) { - return this._rpc('mail.channel', "channel_minimize") - .args([channel.uuid, true]) - .exec({options: {shadow: true}}); + return this._rpc({ + model: 'mail.channel', + method: 'channel_minimize', + args: [channel.uuid, true], + }, { + shadow: true, + }); }, remove_chatter_messages: function (model) { messages = _.reject(messages, function (message) { @@ -963,9 +997,11 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { var method = type === "dm" ? "channel_get" : "channel_create"; var args = type === "dm" ? [[name]] : [name, type]; - return this._rpc('mail.channel', method) - .args(args) - .exec() + return this._rpc({ + model: 'mail.channel', + method: method, + args: args, + }) .then(add_channel); }, join_channel: function (channel_id, options) { @@ -978,9 +1014,11 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { // channel already joined channel_defs[channel_id] = $.when(channel); } else { - channel_defs[channel_id] = this._rpc('mail.channel', 'channel_join_and_get_info') - .args([[channel_id]]) - .exec() + channel_defs[channel_id] = this._rpc({ + model: 'mail.channel', + method: 'channel_join_and_get_info', + args: [[channel_id]], + }) .then(function (result) { return add_channel(result, options); }); @@ -988,9 +1026,11 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { return channel_defs[channel_id]; }, open_and_detach_dm: function (partner_id) { - return this._rpc('mail.channel', 'channel_get_and_minimize') - .args([[partner_id]]) - .exec() + return this._rpc({ + model: 'mail.channel', + method: 'channel_get_and_minimize', + args: [[partner_id]], + }) .then(add_channel); }, open_channel: function (channel) { @@ -999,20 +1039,26 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { unsubscribe: function (channel) { if (_.contains(['public', 'private'], channel.type)) { - return this._rpc('mail.channel', 'action_unfollow') - .args([[channel.id]]) - .exec(); + return this._rpc({ + model: 'mail.channel', + method: 'action_unfollow', + args: [[channel.id]], + }); } else { - return this._rpc('mail.channel', 'channel_pin') - .args([channel.uuid, false]) - .exec(); + return this._rpc({ + model: 'mail.channel', + method: 'channel_pin', + args: [channel.uuid, false], + }); } }, close_chat_session: function (channel_id) { var channel = this.get_channel(channel_id); - this._rpc('mail.channel', "channel_fold") - .kwargs({uuid : channel.uuid, state : "closed"}) - .exec({options: {shadow: true}}); + this._rpc({ + model: 'mail.channel', + method: 'channel_fold', + kwargs: {uuid : channel.uuid, state : 'closed'}, + }, {shadow: true}); }, fold_channel: function (channel_id, folded) { var args = { @@ -1021,9 +1067,11 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { if (_.isBoolean(folded)) { args.state = folded ? 'folded' : 'open'; } - return this._rpc('mail.channel', "channel_fold") - .kwargs(args) - .exec({options: {shadow: true}}); + return this._rpc({ + model: 'mail.channel', + method: 'channel_fold', + kwargs: args, + }, {shadow: true}); }, /** * Special redirection handling for given model and id @@ -1046,9 +1094,11 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { }; if (res_model === "res.partner") { var domain = [["partner_id", "=", res_id]]; - this._rpc('res.users', "search") - .args([domain]) - .exec() + this._rpc({ + model: 'res.users', + method: 'search', + args: [domain], + }) .then(function (user_ids) { if (user_ids.length && user_ids[0] !== session.uid && dm_redirection_callback) { self.create_channel(res_id, 'dm').then(dm_redirection_callback); @@ -1057,9 +1107,11 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { } }); } else { - this._rpc(res_model, 'get_formview_id') - .args([[res_id], session.user_context]) - .exec() + this._rpc({ + model: res_model, + method: 'get_formview_id', + args: [[res_id], session.user_context], + }) .then(function (view_id) { redirect_to_document(res_model, res_id, view_id); }); @@ -1083,9 +1135,13 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { if (!channels_preview_def) { if (missing_channels.length) { var missing_channel_ids = _.pluck(missing_channels, 'id'); - channels_preview_def = this._rpc('mail.channel', 'channel_fetch_preview') - .args([missing_channel_ids]) - .exec({options: {shadow: true}}); + channels_preview_def = this._rpc({ + model: 'mail.channel', + method: 'channel_fetch_preview', + args: [missing_channel_ids], + }, { + shadow: true, + }); } else { channels_preview_def = $.when(); } @@ -1120,9 +1176,13 @@ var ChatManager = Class.extend(Mixins.EventDispatcherMixin, ServicesMixin, { }); if (!values.length) { // extend the research to all users - def = this._rpc('res.partner', 'im_search') - .args([search_val, limit || 20]) - .exec({options: {shadow: true}}); + def = this._rpc({ + model: 'res.partner', + method: 'im_search', + args: [search_val, limit || 20], + }, { + shadow: true, + }); } else { def = $.when(values); } |
