diff options
Diffstat (limited to 'addons/mail/static/src/js/models/threads/mailbox.js')
| -rw-r--r-- | addons/mail/static/src/js/models/threads/mailbox.js | 224 |
1 files changed, 0 insertions, 224 deletions
diff --git a/addons/mail/static/src/js/models/threads/mailbox.js b/addons/mail/static/src/js/models/threads/mailbox.js deleted file mode 100644 index a08f92f0ab8..00000000000 --- a/addons/mail/static/src/js/models/threads/mailbox.js +++ /dev/null @@ -1,224 +0,0 @@ -odoo.define('mail.model.Mailbox', function (require) { -"use strict"; - -var SearchableThread = require('mail.model.SearchableThread'); - -var core = require('web.core'); - -var _t = core._t; - -/** - * Mailboxes, called "static channels" in earlier version of Odoo, are threads - * that are not represented on the server. We can see them as "threads that are - * not conversations". For instance, the well-known "Inbox" folder contains a - * list of messages, but the inbox does not represent a conversation: Inbox is - * modeled as a mailbox. - */ -var Mailbox = SearchableThread.extend({ - - /** - * @override - * @param {Object} params - * @param {Object} params.data - * @param {string} params.data.id the ID of the mailbox, without the ``mailbox_`` prefix. - * @param {integer} [params.data.mailboxCounter=0] the initial mailbox counter of this mailbox. - */ - init: function (params) { - var data = params.data; - // ID or mailboxes are always prefixed with 'mailbox_' - data.id = 'mailbox_' + data.id; - data.type = 'mailbox'; - this._super.apply(this, arguments); - this._mailboxCounter = data.mailboxCounter || 0; - }, - - //-------------------------------------------------------------------------- - // Public - //-------------------------------------------------------------------------- - - /** - * Decrement the counter of this mailbox. It floors to 0. - * - * @param {integer} [num=1] how many, at most, the counter is decremented - */ - decrementMailboxCounter: function (num) { - num = _.isNumber(num) ? num : 1; - this._mailboxCounter = Math.max(this._mailboxCounter - num, 0); - }, - /** - * Get the mailbox counter of this mailbox. - * - * @returns {integer} - */ - getMailboxCounter: function () { - return this._mailboxCounter; - }, - /** - * Get the preview of the messages from the inbox mailbox. - * If there are multiple messages associated to a similar document or - * channel, only keep the lastest message of this document/channel in the - * previews. - * - * @returns {Promise<Object[]>} - */ - getMessagePreviews: function () { - var self = this; - - return this.fetchMessages().then(function (messages) { - // pick only last message of chatter - // items = list of objects - // { - // unreadCounter: {integer}, - // message: {mail.model.Message}, - // messageIDs: {integer[]}, - // } - var items = []; - _.each(messages, function (message) { - var unreadCounter = 1; - var messageIDs = [message.getID()]; - var similarItem = _.find(items, function (item) { - return self._areMessagesFromSameDocumentThread(item.message, message) || - self._areMessagesFromSameChannel(item.message, message); - }); - if (similarItem) { - unreadCounter = similarItem.unreadCounter + 1; - messageIDs = similarItem.messageIDs.concat(messageIDs); - var index = _.findIndex(items, similarItem); - items[index] = { - unreadCounter: unreadCounter, - message: message, - messageIDs: messageIDs - }; - } else { - items.push({ - unreadCounter: unreadCounter, - message: message, - messageIDs: messageIDs, - }); - } - }); - return _.map(items, function (item) { - return _.extend(item.message.getPreview(), { - unreadCounter: item.unreadCounter, - messageIDs: item.messageIDs, - }); - }); - }); - }, - /** - * Increment the counter of this mailbox - * - * @param {integer} [num=1] how many, the counter is incremented - */ - incrementMailboxCounter: function (num) { - num = _.isNumber(num) ? num : 1; - this._mailboxCounter = Math.max(this._mailboxCounter + num, 0); - }, - /** - * Marks all messages from the mailbox as read. At the moment, this method - * makes only sense for 'Inbox'. - * - * @param {Array} domain - * @return {Promise} resolved when all messages have been marked as read - * on the server - */ - markAllMessagesAsRead: function (domain) { - if (this._id === 'mailbox_inbox' && this.getMailboxCounter() > 0) { - return this._rpc({ - model: 'mail.message', - method: 'mark_all_as_read', - kwargs: { - domain: domain, - }, - }); - } - return Promise.resolve(); - }, - /** - * @param {integer} newCounter - */ - setMailboxCounter(newCounter) { - this._mailboxCounter = newCounter; - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * Tell whether the two messages originate from the same channel. - * If any one of them does not originate from a channel, returns false. - * - * @private - * @param {mail.model.Message} message1 - * @param {mail.model.Message} message2 - * @returns {boolean} - */ - _areMessagesFromSameChannel: function (message1, message2) { - return message1.originatesFromChannel() && - message2.originatesFromChannel() && - message1.getOriginChannelID() === message2.getOriginChannelID(); - }, - /** - * Tell whether the two messages are linked to the same document thread. - * If any one of them is not linked to a document, returns false. - * - * @private - * @param {mail.model.Message} message1 - * @param {mail.model.Message} message2 - * @returns {boolean} - */ - _areMessagesFromSameDocumentThread: function (message1, message2) { - return message1.isLinkedToDocumentThread() && - message2.isLinkedToDocumentThread() && - message1.getDocumentModel() === message2.getDocumentModel() && - message1.getDocumentID() === message2.getDocumentID(); - }, - /** - * Get the domain to fetch all the messages in the current mailbox - * - * @override - * @private - * @returns {Array} - * @throws on missing domain for the provided mailbox (mailboxes should - * always have a domain on messages to fetch) - */ - _getThreadDomain: function () { - if (this._id === 'mailbox_inbox') { - return [['needaction', '=', true]]; - } else if (this._id === 'mailbox_starred') { - return [['starred', '=', true]]; - } else if (this._id === 'mailbox_history') { - return [['needaction', '=', false]]; - } else if (this._id === 'mailbox_moderation') { - return [['need_moderation', '=', true]]; - } else { - throw (_.str(_t("Missing domain for mailbox with ID '%s'"), this._id)); - } - }, - /** - * Post a message from inbox. This is used when using the 'reply' feature - * on a message that is linked to a document thread. - * - * @override - * @private - * @param {Object} messageData - * @param {Object} options - * @param {integer} options.documentID - * @param {string} options.documentModel - * @returns {$.Promise} - */ - _postMessage: function (messageData, options) { - var documentThread = this.call( - 'mail_service', - 'getDocumentThread', - options.documentModel, - options.documentID - ); - return documentThread.postMessage(messageData); - }, -}); - -return Mailbox; - -}); |
