diff options
| author | Géry Debongnie <ged@odoo.com> | 2017-03-05 09:34:56 +0100 |
|---|---|---|
| committer | Aaron Bohy <aab@odoo.com> | 2017-04-11 19:44:38 +0200 |
| commit | e5740270568404d71a3bc093074a085c9c2eded8 (patch) | |
| tree | 7b84740d92c550236de25a37cf37d244760bdbf3 /addons/mail/static/src | |
| parent | 0df9968433389e0d504276cd711473c2eef937ae (diff) | |
[REF] web,*: remove 'web.model' and 'web.dataModel
Use this.rpc instead of Model object, with web.ajax if necessary.
nb: EventDispatcherMixin include now the custom_events managment instead
of widget
Diffstat (limited to 'addons/mail/static/src')
| -rw-r--r-- | addons/mail/static/src/js/activity.js | 13 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chat_manager.js | 401 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chatter.js | 37 | ||||
| -rw-r--r-- | addons/mail/static/src/js/chatter_composer.js | 8 | ||||
| -rw-r--r-- | addons/mail/static/src/js/client_action.js | 31 | ||||
| -rw-r--r-- | addons/mail/static/src/js/composer.js | 18 | ||||
| -rw-r--r-- | addons/mail/static/src/js/followers.js | 14 |
7 files changed, 306 insertions, 216 deletions
diff --git a/addons/mail/static/src/js/activity.js b/addons/mail/static/src/js/activity.js index 9c81966929a..d1afae2e675 100644 --- a/addons/mail/static/src/js/activity.js +++ b/addons/mail/static/src/js/activity.js @@ -52,14 +52,18 @@ var AbstractActivityField = AbstractField.extend({ // private _markActivityDone: function (id) { - return this.performModelRPC('mail.activity', 'action_done', [[id]]); + return this.rpc('mail.activity', 'action_done') + .args([[id]]) + .exec(); }, _readActivities: function () { var self = this; var missing_ids = _.difference(this.value.res_ids, _.pluck(this.activities, 'id')); var fetch_def; if (missing_ids.length) { - fetch_def = this.performModelRPC('mail.activity', 'read', [missing_ids]); + fetch_def = this.rpc('mail.activity', 'read') + .args([missing_ids]) + .exec(); } return $.when(fetch_def).then(function (results) { // filter out activities that are no longer linked to this record @@ -164,8 +168,9 @@ var Activity = AbstractActivityField.extend({ _onUnlinkActivity: function (event) { event.preventDefault(); var activity_id = $(event.currentTarget).data('activity-id'); - return this - .performModelRPC('mail.activity', 'unlink', [[activity_id]]) + return this.rpc('mail.activity', 'unlink') + .args([[activity_id]]) + .exec() .then(this._reload.bind(this, {activity: true})); }, _onMarkActivityDone: function (event) { diff --git a/addons/mail/static/src/js/chat_manager.js b/addons/mail/static/src/js/chat_manager.js index 86438de1c9b..709ff965df9 100644 --- a/addons/mail/static/src/js/chat_manager.js +++ b/addons/mail/static/src/js/chat_manager.js @@ -7,10 +7,11 @@ var config = require('web.config'); var Bus = require('web.Bus'); var core = require('web.core'); var data = require('web.data'); -var Model = require('web.Model'); var session = require('web.session'); var time = require('web.time'); var web_client = require('web.web_client'); +var Class = require('web.Class'); +var Mixins = require('web.mixins'); var _t = core._t; var _lt = core._lt; @@ -18,11 +19,6 @@ var LIMIT = 25; var preview_msg_max_size = 350; // optimal for native english speakers var ODOOBOT_ID = "ODOOBOT"; -var MessageModel = new Model('mail.message', session.user_context); -var ChannelModel = new Model('mail.channel', session.user_context); -var UserModel = new Model('res.users', session.user_context); -var PartnerModel = new Model('res.partner', session.user_context); - // Private model //---------------------------------------------------------------------------------- var messages = []; @@ -367,62 +363,6 @@ function remove_message_from_channel (channel_id, message) { }); } -// options: domain, load_more -function fetch_from_channel (channel, options) { - options = options || {}; - var domain = - (channel.id === "channel_inbox") ? [['needaction', '=', true]] : - (channel.id === "channel_starred") ? [['starred', '=', true]] : - [['channel_ids', 'in', channel.id]]; - var cache = get_channel_cache(channel, options.domain); - - if (options.domain) { - domain = new data.CompoundDomain(domain, options.domain || []); - } - if (options.load_more) { - var min_message_id = cache.messages[0].id; - domain = new data.CompoundDomain([['id', '<', min_message_id]], domain); - } - - return MessageModel.call('message_fetch', [domain], {limit: LIMIT, context: session.user_context}).then(function (msgs) { - if (!cache.all_history_loaded) { - cache.all_history_loaded = msgs.length < LIMIT; - } - cache.loaded = true; - - _.each(msgs, function (msg) { - add_message(msg, {channel_id: channel.id, silent: true, domain: options.domain}); - }); - var channel_cache = get_channel_cache(channel, options.domain || []); - return channel_cache.messages; - }); -} - -// options: force_fetch -function fetch_document_messages (ids, options) { - var loaded_msgs = _.filter(messages, function (message) { - return _.contains(ids, message.id); - }); - var loaded_msg_ids = _.pluck(loaded_msgs, 'id'); - - options = options || {}; - 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 MessageModel.call('message_format', [ids_to_load], {context: session.user_context}).then(function (msgs) { - var processed_msgs = []; - _.each(msgs, function (msg) { - processed_msgs.push(add_message(msg, {silent: true})); - }); - return _.sortBy(loaded_msgs.concat(processed_msgs), function (msg) { - return msg.id; - }); - }); - } else { - return $.when(loaded_msgs); - } -} - function update_channel_unread_counter (channel, counter) { if (channel.unread_counter > 0 && counter === 0) { unread_conversation_counter = Math.max(0, unread_conversation_counter-1); @@ -436,10 +376,6 @@ function update_channel_unread_counter (channel, counter) { chat_manager.bus.trigger("update_channel_unread_counter", channel); } -var channel_seen = _.throttle(function (channel) { - return ChannelModel.call('channel_seen', [[channel.id]], {}, {shadow: true}); -}, 3000); - // Notification handlers // --------------------------------------------------------------------------------- function on_notification (notifications) { @@ -657,12 +593,137 @@ function on_transient_message_notification (data) { // Public interface //---------------------------------------------------------------------------------- -var chat_manager = { +var ChatManager = Class.extend(Mixins.EventDispatcherMixin, Mixins.ServicesMixin, { // these two functions are exposed for extensibility purposes and shouldn't be called by other modules make_message: make_message, make_channel: make_channel, + init: function (parent) { + var self = this; + Mixins.EventDispatcherMixin.init.call(this); + this.setParent(parent); + + this.bus = new Bus(); + this.bus.on('client_action_open', null, function (open) { + client_action_open = open; + }); + + bus.on('notification', null, on_notification); + + this.channel_seen = _.throttle(function (channel) { + return self.rpc('mail.channel', 'channel_seen') + .args([[channel.id]]) + .exec({shadow: true}); + }, 3000); + }, + + start: function () { + this.is_ready = session.is_bound.then(function(){ + return session.rpc('/mail/client_action'); + }).then(this._onMailClientAction.bind(this)); + + add_channel({ + id: "channel_inbox", + name: _lt("Inbox"), + type: "static", + }, { display_needactions: true }); + + add_channel({ + id: "channel_starred", + name: _lt("Starred"), + type: "static" + }); + }, + + _onMailClientAction: function (result) { + _.each(result.channel_slots, function (channels) { + _.each(channels, add_channel); + }); + needaction_counter = result.needaction_inbox_counter; + starred_counter = result.starred_counter; + commands = _.map(result.commands, function (command) { + return _.extend({ id: command.name }, command); + }); + mention_partner_suggestions = result.mention_partner_suggestions; + discuss_menu_id = result.menu_id; + + // Shortcodes: canned responses and emojis + _.each(result.shortcodes, function (s) { + if (s.shortcode_type === 'text') { + canned_responses.push(_.pick(s, ['id', 'source', 'substitution'])); + } else { + emojis.push(_.pick(s, ['id', 'source', 'substitution', 'description'])); + emoji_substitutions[_.escape(s.source)] = s.substitution; + } + }); + bus.start_polling(); + }, + + // options: domain, load_more + _fetchFromChannel: function (channel, options) { + options = options || {}; + var domain = + (channel.id === "channel_inbox") ? [['needaction', '=', true]] : + (channel.id === "channel_starred") ? [['starred', '=', true]] : + [['channel_ids', 'in', channel.id]]; + var cache = get_channel_cache(channel, options.domain); + + if (options.domain) { + domain = new data.CompoundDomain(domain, options.domain || []).eval(); + } + if (options.load_more) { + var min_message_id = cache.messages[0].id; + domain = new data.CompoundDomain([['id', '<', min_message_id]], domain).eval(); + } + + return this.rpc('mail.message', 'message_fetch') + .args([domain]) + .kwargs({limit: LIMIT, context: session.user_context}) + .exec() + .then(function (msgs) { + if (!cache.all_history_loaded) { + cache.all_history_loaded = msgs.length < LIMIT; + } + cache.loaded = true; + + _.each(msgs, function (msg) { + add_message(msg, {channel_id: channel.id, silent: true, domain: options.domain}); + }); + var channel_cache = get_channel_cache(channel, options.domain || []); + return channel_cache.messages; + }); + }, + // options: force_fetch + _fetchDocumentMessages : function (ids, options) { + var loaded_msgs = _.filter(messages, function (message) { + return _.contains(ids, message.id); + }); + var loaded_msg_ids = _.pluck(loaded_msgs, 'id'); + + options = options || {}; + 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() + .then(function (msgs) { + var processed_msgs = []; + _.each(msgs, function (msg) { + processed_msgs.push(add_message(msg, {silent: true})); + }); + return _.sortBy(loaded_msgs.concat(processed_msgs), function (msg) { + return msg.id; + }); + }); + } else { + return $.when(loaded_msgs); + } + }, + post_message: function (data, options) { + var self = this; options = options || {}; // This message will be received from the mail composer as html content subtype @@ -682,12 +743,15 @@ var chat_manager = { } if ('channel_id' in options) { // post a message in a channel or execute a command - return ChannelModel.call(data.command ? 'execute_command' : 'message_post', [options.channel_id], _.extend(msg, { - message_type: 'comment', - content_subtype: 'html', - subtype: 'mail.mt_comment', - command: data.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(); } if ('model' in options && 'res_id' in options) { // post a message in a chatter @@ -699,14 +763,20 @@ var chat_manager = { subtype_id: data.subtype_id, }); - var model = new Model(options.model); - return model.call('message_post', [options.res_id], msg).then(function (msg_id) { - return MessageModel.call('message_format', [msg_id]).then(function (msgs) { - msgs[0].model = options.model; - msgs[0].res_id = options.res_id; - add_message(msgs[0]); + return this.rpc(options.model, 'message_post') + .args([options.res_id]) + .kwargs(msg) + .exec() + .then(function (msg_id) { + return self.rpc('mail.message', 'message_format') + .args([msg_id]) + .exec() + .then(function (msgs) { + msgs[0].model = options.model; + msgs[0].res_id = options.res_id; + add_message(msgs[0]); + }); }); - }); } }, @@ -719,7 +789,7 @@ var chat_manager = { if ('channel_id' in options && options.load_more) { // get channel messages, force load_more channel = this.get_channel(options.channel_id); - return fetch_from_channel(channel, {domain: options.domain || {}, load_more: true}); + return this._fetchFromChannel(channel, {domain: options.domain || {}, load_more: true}); } if ('channel_id' in options) { // channel message, check in cache first @@ -728,12 +798,12 @@ var chat_manager = { if (channel_cache.loaded) { return $.when(channel_cache.messages); } else { - return fetch_from_channel(channel, {domain: options.domain}); + return this._fetchFromChannel(channel, {domain: options.domain}); } } if ('ids' in options) { // get messages from their ids (chatter is the main use case) - return fetch_document_messages(options.ids, options).then(function(result) { + return this._fetchDocumentMessages(options.ids, options).then(function(result) { chat_manager.mark_as_read(options.ids); return result; }); @@ -742,16 +812,24 @@ var chat_manager = { // 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]]; - MessageModel.call('message_fetch', [domain], {limit: 30}).then(function (msgs) { - return _.map(msgs, add_message); - }); + this.rpc('mail.message', 'message_fetch') + .args([domain]) + .kwargs({limit: 30}) + .exec() + .then(function (msgs) { + return _.map(msgs, add_message); + }); } }, toggle_star_status: function (message_id) { - return MessageModel.call('toggle_message_starred', [[message_id]]); + return this.rpc('mail.message', 'toggle_message_starred') + .args([[message_id]]) + .exec(); }, unstar_all: function () { - return MessageModel.call('unstar_all', [[]], {}); + return this.rpc('mail.message', 'unstar_all') + .args([[]]) + .exec(); }, mark_as_read: function (message_ids) { var ids = _.filter(message_ids, function (id) { @@ -760,24 +838,30 @@ var chat_manager = { return !message || message.is_needaction; }); if (ids.length) { - return MessageModel.call('set_message_done', [ids]); + return this.rpc('mail.message', 'set_message_done') + .args([ids]) + .exec(); } else { return $.when(); } }, mark_all_as_read: function (channel, domain) { if ((channel.id === "channel_inbox" && needaction_counter) || (channel && channel.needaction_counter)) { - return MessageModel.call('mark_all_as_read', [], {channel_ids: channel.id !== "channel_inbox" ? [channel.id] : [], domain: domain}); + return this.rpc('mail.message', 'mark_all_as_read') + .kwargs({channel_ids: channel.id !== "channel_inbox" ? [channel.id] : [], domain: domain}) + .exec(); } return $.when(); }, undo_mark_as_read: function (message_ids, channel) { - return MessageModel.call('mark_as_unread', [message_ids, [channel.id]]); + return this.rpc('mail.message', 'mark_as_unread') + .args([message_ids, [channel.id]]) + .exec(); }, mark_channel_as_seen: function (channel) { if (channel.unread_counter > 0 && channel.type !== 'static') { update_channel_unread_counter(channel, 0); - channel_seen(channel); + this.channel_seen(channel); } }, @@ -802,8 +886,9 @@ var chat_manager = { return mention_partner_suggestions; } if (!channel.members_deferred) { - channel.members_deferred = ChannelModel - .call("channel_fetch_listeners", [channel.uuid], {}, {shadow: true}) + channel.members_deferred = this.rpc('mail.channel', "channel_fetch_listeners") + .args([channel.uuid]) + .exec({shadow: true}) .then(function (members) { var suggestions = []; _.each(mention_partner_suggestions, function (partners) { @@ -864,21 +949,23 @@ var chat_manager = { }, detach_channel: function (channel) { - return ChannelModel.call("channel_minimize", [channel.uuid, true], {}, {shadow: true}); + return this.rpc('mail.channel', "channel_minimize") + .args([channel.uuid, true]) + .exec({shadow: true}); }, remove_chatter_messages: function (model) { messages = _.reject(messages, function (message) { return message.channel_ids.length === 0 && message.model === model; }); }, - bus: new Bus(), create_channel: function (name, type) { var method = type === "dm" ? "channel_get" : "channel_create"; var args = type === "dm" ? [[name]] : [name, type]; - return ChannelModel - .call(method, args) + return this.rpc('mail.channel', method) + .args(args) + .exec() .then(add_channel); }, join_channel: function (channel_id, options) { @@ -891,8 +978,9 @@ var chat_manager = { // channel already joined channel_defs[channel_id] = $.when(channel); } else { - channel_defs[channel_id] = ChannelModel - .call('channel_join_and_get_info', [[channel_id]]) + channel_defs[channel_id] = this.rpc('mail.channel', 'channel_join_and_get_info') + .args([[channel_id]]) + .exec() .then(function (result) { return add_channel(result, options); }); @@ -900,7 +988,10 @@ var chat_manager = { return channel_defs[channel_id]; }, open_and_detach_dm: function (partner_id) { - return ChannelModel.call('channel_get_and_minimize', [[partner_id]]).then(add_channel); + return this.rpc('mail.channel', 'channel_get_and_minimize') + .args([[partner_id]]) + .exec() + .then(add_channel); }, open_channel: function (channel) { chat_manager.bus.trigger(client_action_open ? 'open_channel' : 'detach_channel', channel); @@ -908,14 +999,20 @@ var chat_manager = { unsubscribe: function (channel) { if (_.contains(['public', 'private'], channel.type)) { - return ChannelModel.call('action_unfollow', [[channel.id]]); + return this.rpc('mail.channel', 'action_unfollow') + .args([[channel.id]]) + .exec(); } else { - return ChannelModel.call('channel_pin', [channel.uuid, false]); + return this.rpc('mail.channel', 'channel_pin') + .args([channel.uuid, false]) + .exec(); } }, close_chat_session: function (channel_id) { var channel = this.get_channel(channel_id); - ChannelModel.call("channel_fold", [], {uuid : channel.uuid, state : "closed"}, {shadow: true}); + this.rpc('mail.channel', "channel_fold") + .kwargs({uuid : channel.uuid, state : "closed"}) + .exec({shadow: true}); }, fold_channel: function (channel_id, folded) { var args = { @@ -924,7 +1021,9 @@ var chat_manager = { if (_.isBoolean(folded)) { args.state = folded ? 'folded' : 'open'; } - return ChannelModel.call("channel_fold", [], args, {shadow: true}); + return this.rpc('mail.channel', "channel_fold") + .kwargs(args) + .exec({shadow: true}); }, /** * Special redirection handling for given model and id @@ -947,17 +1046,23 @@ var chat_manager = { }; if (res_model === "res.partner") { var domain = [["partner_id", "=", res_id]]; - UserModel.call("search", [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); - } else { - redirect_to_document(res_model, res_id); - } - }); + this.rpc('res.users', "search") + .args([domain]) + .exec() + .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); + } else { + redirect_to_document(res_model, res_id); + } + }); } else { - new Model(res_model).call('get_formview_id', [[res_id], session.user_context]).then(function (view_id) { - redirect_to_document(res_model, res_id, view_id); - }); + this.rpc(res_model, 'get_formview_id') + .args([[res_id], session.user_context]) + .exec() + .then(function (view_id) { + redirect_to_document(res_model, res_id, view_id); + }); } }, @@ -978,7 +1083,9 @@ var chat_manager = { if (!channels_preview_def) { if (missing_channels.length) { var missing_channel_ids = _.pluck(missing_channels, 'id'); - channels_preview_def = ChannelModel.call('channel_fetch_preview', [missing_channel_ids], {}, {shadow: true}); + channels_preview_def = this.rpc('mail.channel', 'channel_fetch_preview') + .args([missing_channel_ids]) + .exec({shadow: true}); } else { channels_preview_def = $.when(); } @@ -1013,7 +1120,9 @@ var chat_manager = { }); if (!values.length) { // extend the research to all users - def = PartnerModel.call('im_search', [search_val, limit || 20], {}, {shadow: true}); + def = this.rpc('res.partner', 'im_search') + .args([search_val, limit || 20]) + .exec({shadow: true}); } else { def = $.when(values); } @@ -1024,58 +1133,16 @@ var chat_manager = { return _.sortBy(autocomplete_data, 'label'); }); }, -}; - -chat_manager.bus.on('client_action_open', null, function (open) { - client_action_open = open; }); -// Initialization -// --------------------------------------------------------------------------------- -function init () { - add_channel({ - id: "channel_inbox", - name: _lt("Inbox"), - type: "static", - }, { display_needactions: true }); - - add_channel({ - id: "channel_starred", - name: _lt("Starred"), - type: "static" - }); - - bus.on('notification', null, on_notification); - - return session.is_bound.then(function(){ - return session.rpc('/mail/client_action'); - }).then(function (result) { - _.each(result.channel_slots, function (channels) { - _.each(channels, add_channel); - }); - needaction_counter = result.needaction_inbox_counter; - starred_counter = result.starred_counter; - commands = _.map(result.commands, function (command) { - return _.extend({ id: command.name }, command); - }); - mention_partner_suggestions = result.mention_partner_suggestions; - discuss_menu_id = result.menu_id; - - // Shortcodes: canned responses and emojis - _.each(result.shortcodes, function (s) { - if (s.shortcode_type === 'text') { - canned_responses.push(_.pick(s, ['id', 'source', 'substitution'])); - } else { - emojis.push(_.pick(s, ['id', 'source', 'substitution', 'description'])); - emoji_substitutions[_.escape(s.source)] = s.substitution; - } - }); - - bus.start_polling(); - }); -} - -chat_manager.is_ready = init(); +var CallService = Class.extend(Mixins.EventDispatcherMixin, Mixins.ServiceProvider, { + init: function () { + Mixins.ServiceProvider.init.call(this); + Mixins.EventDispatcherMixin.init.call(this); + }, +}); +var chat_manager = new ChatManager(new CallService()); +chat_manager.start(); return chat_manager; diff --git a/addons/mail/static/src/js/chatter.js b/addons/mail/static/src/js/chatter.js index 55b0766dd79..67f29ab1bbb 100644 --- a/addons/mail/static/src/js/chatter.js +++ b/addons/mail/static/src/js/chatter.js @@ -245,25 +245,28 @@ var Chatter = Widget.extend(chat_mixin, { this.suggested_partners_def = $.Deferred(); var method = 'message_get_suggested_recipients'; var args = [[this.context.default_res_id], this.context]; - this.performModelRPC(this.record.model, method, args).then(function (result) { - if (!self.suggested_partners_def) { - return; // widget has been reset (e.g. we just switched to another record) - } - var suggested_partners = []; - var thread_recipients = result[self.context.default_res_id]; - _.each(thread_recipients, function (recipient) { - var parsed_email = utils.parse_email(recipient[1]); - suggested_partners.push({ - checked: true, - partner_id: recipient[0], - full_name: recipient[1], - name: parsed_email[0], - email_address: parsed_email[1], - reason: recipient[2], + this.rpc(this.record.model, method) + .args(args) + .exec() + .then(function (result) { + if (!self.suggested_partners_def) { + return; // widget has been reset (e.g. we just switched to another record) + } + var suggested_partners = []; + var thread_recipients = result[self.context.default_res_id]; + _.each(thread_recipients, function (recipient) { + var parsed_email = utils.parse_email(recipient[1]); + suggested_partners.push({ + checked: true, + partner_id: recipient[0], + full_name: recipient[1], + name: parsed_email[0], + email_address: parsed_email[1], + reason: recipient[2], + }); }); + self.suggested_partners_def.resolve(suggested_partners); }); - self.suggested_partners_def.resolve(suggested_partners); - }); } this.suggested_partners_def.then(function (suggested_partners) { self._openComposer({ is_log: false, suggested_partners: suggested_partners }); diff --git a/addons/mail/static/src/js/chatter_composer.js b/addons/mail/static/src/js/chatter_composer.js index e9bc075bf3b..4e7eb6a14ec 100644 --- a/addons/mail/static/src/js/chatter_composer.js +++ b/addons/mail/static/src/js/chatter_composer.js @@ -125,7 +125,9 @@ var ChatterComposer = composer.BasicComposer.extend({ var def; if (names_to_find.length > 0) { var args = [[this.context.default_res_id], names_to_find]; - def = this.performModelRPC(this.model, 'message_partner_info_from_emails', args); + def = this.rpc(this.model, 'message_partner_info_from_emails') + .args(args) + .exec(); } // for unknown names + incomplete partners -> open popup - cancel = remove from recipients @@ -171,7 +173,9 @@ var ChatterComposer = composer.BasicComposer.extend({ var def; if (new_names_to_find.length > 0) { var args = [[self.context.default_res_id], new_names_to_find, true]; - self.performModelRPC(self.model, 'message_partner_info_from_emails', args); + self.rpc(self.model, 'message_partner_info_from_emails') + .args(args) + .exec(); } $.when(def).pipe(function (result) { result = result || []; diff --git a/addons/mail/static/src/js/client_action.js b/addons/mail/static/src/js/client_action.js index 1f2e5eb1de7..e461161c437 100644 --- a/addons/mail/static/src/js/client_action.js +++ b/addons/mail/static/src/js/client_action.js @@ -12,7 +12,6 @@ var core = require('web.core'); var data = require('web.data'); var Dialog = require('web.Dialog'); var dom = require('web.dom'); -var Model = require('web.Model'); var pyeval = require('web.pyeval'); var SearchView = require('web.SearchView'); @@ -70,8 +69,10 @@ var PartnerInviteDialog = Dialog.extend({ var self = this; var data = this.$input.select2('data'); if(data.length >= 1){ - var ChannelModel = new Model('mail.channel'); - return ChannelModel.call('channel_invite', [this.channel_id], {partner_ids: _.pluck(data, 'id')}) + return this.rpc('mail.channel', 'channel_invite') + .args([this.channel_id]) + .kwargs({partner_ids: _.pluck(data, 'id')}) + .exec() .then(function(){ var names = _.escape(_.pluck(data, 'text').join(', ')); var notification = _.str.sprintf(_t('You added <b>%s</b> to the conversation.'), names); @@ -380,18 +381,20 @@ var ChatAction = Widget.extend(ControlPanelMixin, { }, do_search_channel: function(search_val){ - var Channel = new Model("mail.channel"); - return Channel.call('channel_search_to_join', [search_val]).then(function(result){ - var values = []; - _.each(result, function(channel){ - var escaped_name = _.escape(channel.name); - values.push(_.extend(channel, { - 'value': escaped_name, - 'label': escaped_name, - })); + return this.rpc('mail.channel', 'channel_search_to_join') + .args([search_val]) + .exec() + .then(function(result){ + var values = []; + _.each(result, function(channel){ + var escaped_name = _.escape(channel.name); + values.push(_.extend(channel, { + 'value': escaped_name, + 'label': escaped_name, + })); + }); + return values; }); - return values; - }); }, set_channel: function (channel) { diff --git a/addons/mail/static/src/js/composer.js b/addons/mail/static/src/js/composer.js index 4d471577922..b8a25cda7e3 100644 --- a/addons/mail/static/src/js/composer.js +++ b/addons/mail/static/src/js/composer.js @@ -7,7 +7,6 @@ var utils = require('mail.utils'); var core = require('web.core'); var data = require('web.data'); var dom = require('web.dom'); -var Model = require('web.Model'); var session = require('web.session'); var Widget = require('web.Widget'); @@ -417,9 +416,6 @@ var BasicComposer = Widget.extend(chat_mixin, { // Emojis this.emoji_container_classname = 'o_composer_emoji'; - - this.PartnerModel = new Model('res.partner'); - this.ChannelModel = new Model('mail.channel'); }, start: function () { @@ -665,18 +661,22 @@ var BasicComposer = Widget.extend(chat_mixin, { // Mention mention_fetch_throttled: function (model, method, kwargs) { + var self = this; // Delays the execution of the RPC to prevent unnecessary RPCs when the user is still typing var def = $.Deferred(); clearTimeout(this.mention_fetch_timer); this.mention_fetch_timer = setTimeout(function () { - return model.call(method, kwargs).then(function (results) { - def.resolve(results); - }); + return self.rpc(model, method) + .kwargs(kwargs) + .exec() + .then(function (results) { + def.resolve(results); + }); }, 200); return def; }, mention_fetch_channels: function (search) { - return this.mention_fetch_throttled(this.ChannelModel, 'get_mention_suggestions', { + return this.mention_fetch_throttled('mail.channel', 'get_mention_suggestions', { limit: this.options.mention_fetch_limit, search: search, }).then(function (suggestions) { @@ -706,7 +706,7 @@ var BasicComposer = Widget.extend(chat_mixin, { }); if (!suggestions.length && !self.options.mention_partners_restricted) { // no result found among prefetched partners, fetch other suggestions - suggestions = self.mention_fetch_throttled(self.PartnerModel, 'get_mention_suggestions', { + suggestions = mention_fetch_throttled('res.partner', 'get_mention_suggestions', { limit: limit, search: search, }); diff --git a/addons/mail/static/src/js/followers.js b/addons/mail/static/src/js/followers.js index 9d71039c229..d56d5944d6b 100644 --- a/addons/mail/static/src/js/followers.js +++ b/addons/mail/static/src/js/followers.js @@ -219,7 +219,10 @@ var Followers = AbstractField.extend({ partner_ids: [this.partnerID], context: {}, // new Context(this.build_context(), {}) // fixme }; - this.performModelRPC(this.model, 'message_subscribe', [[this.res_id]], kwargs) + this.rpc(this.model, 'message_subscribe') + .args([[this.res_id]]) + .kwargs(kwargs) + .exec() .then(this._reload.bind(this)); }, /** @@ -239,7 +242,9 @@ var Followers = AbstractField.extend({ ids.channel_ids, {}, // new Context(self.build_context(), {}) // fixme ]; - self.performModelRPC(self.model, 'message_unsubscribe', args) + self.rpc(self.model, 'message_unsubscribe') + .args(args) + .exec() .then(self._reload.bind(self)); def.resolve(); }, @@ -281,7 +286,10 @@ var Followers = AbstractField.extend({ var kwargs = _.extend({}, ids); kwargs.subtype_ids = checklist; kwargs.context = {}; // new Context(this.build_context(), {}); // fixme - this.performModelRPC(this.model, 'message_subscribe', [[this.res_id]], kwargs) + this.rpc(this.model, 'message_subscribe') + .args([[this.res_id]]) + .kwargs(kwargs) + .exec() .then(this._reload.bind(this)); } }, |
