summaryrefslogtreecommitdiff
path: root/addons/mail/static/src/js/models/mailbox.js
diff options
context:
space:
mode:
authorAlexandre Kühn <aku@odoo.com>2018-07-04 13:44:49 +0200
committerAlexandre Kühn <aku@odoo.com>2018-07-19 13:58:34 +0200
commitcb7add2ebd50c1981e35bb12a3e52a69a58bc05f (patch)
treebc3cd295adaf8113b0fc24c19834c685b46d3ea6 /addons/mail/static/src/js/models/mailbox.js
parent12f4f9a51d1cadc4c0dcdefc46a653e78b46f53f (diff)
[MOV] mail: move thread models in specific folder for thread models
The `model` folder contains several files, so this groups files related to threads directly.
Diffstat (limited to 'addons/mail/static/src/js/models/mailbox.js')
-rw-r--r--addons/mail/static/src/js/models/mailbox.js213
1 files changed, 0 insertions, 213 deletions
diff --git a/addons/mail/static/src/js/models/mailbox.js b/addons/mail/static/src/js/models/mailbox.js
deleted file mode 100644
index bcb5ae609b7..00000000000
--- a/addons/mail/static/src/js/models/mailbox.js
+++ /dev/null
@@ -1,213 +0,0 @@
-odoo.define('mail.model.Mailbox', function (require) {
-"use strict";
-
-var ThreadWithCache = require('mail.model.ThreadWithCache');
-
-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 = ThreadWithCache.extend({
-
- /**
- * @override
- * @param {Object} data
- * @param {string} data.id the ID of the mailbox, without the 'mailbox_'
- * prefix.
- * @param {integer} [data.mailboxCounter=0] the initial mailbox counter of
- * this mailbox.
- */
- init: function (parent, 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 local messages of the mailbox (by local messages, we mean
- * messages that have already been fetched from the server).
- *
- * It is possible to filter on local messages that are specific to a
- * document with the `options` parameter.
- *
- * @param {Object} [options]
- * @param {string} [options.documentModel] model of the document that the
- * local messages of inbox must be linked to.
- * @param {integer} [options.documentID] ID of the document that the local
- * messages of inbox must be linked to.
- */
- getLocalMessages: function (options) {
- var localMessages = this._cache['[]'].messages;
- if (!options) {
- return localMessages;
- }
- if (options.documentModel && options.documentID) {
- return _.filter(localMessages, function (localMessage) {
- return localMessage.getDocumentModel() === options.documentModel &&
- localMessage.getDocumentID() === options.documentID;
- });
- }
- },
- /**
- * 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.getMessages().then(function (messages) {
- // pick only last message of chatter
- // items = list of objects
- // { unreadCounter: integer, message: mail.model.Message }
- var items = [];
- _.each(messages, function (message) {
- var unreadCounter = 1;
- var similarItem = _.find(items, function (item) {
- return self._areMessagesFromSameDocumentThread(item.message, message) ||
- self._areMessagesFromSameChannel(item.message, message);
- });
- if (similarItem) {
- unreadCounter = similarItem.unreadCounter + 1;
- var index = _.findIndex(items, similarItem);
- items[index] = {
- unreadCounter: unreadCounter,
- message: message,
- };
- } else {
- items.push({
- unreadCounter: unreadCounter,
- message: message,
- });
- }
- });
- return _.map(items, function (item) {
- return _.extend(item.message.getPreview(), {
- unreadCounter: item.unreadCounter,
- });
- });
- });
- },
- /**
- * 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: {
- channel_ids: [],
- domain: domain,
- },
- });
- }
- return $.when();
- },
-
- //--------------------------------------------------------------------------
- // 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_moderation') {
- return [['need_moderation', '=', true]];
- } else {
- throw _t(_.str("Missing domain for mailbox with ID '%s'", this._id));
- }
- },
-
-});
-
-return Mailbox;
-
-});