diff options
| author | Alexandre Kühn <aku@odoo.com> | 2018-08-30 16:10:20 +0200 |
|---|---|---|
| committer | Alexandre Kühn <aku@odoo.com> | 2018-08-30 17:55:18 +0200 |
| commit | f80bbb4b2a1230ba543e97d3da01c7b2c52d24cc (patch) | |
| tree | 34d27fbdab943be7a2ebd675095060bb6ea512b5 /addons/mail/static | |
| parent | f8e3aed20ba073294fa1453f86709d6cbce650f5 (diff) | |
[IMP] mail, mail_bot: improved push notifications permission response
This commit makes small improvements on the messaging menu with
the new module `mail_bot`:
[IMP] When OdooBot has a request, it now adds "+1" to the counter of
the messaging menu. The related preview also has a bold title,
and displays "(1)" next to the title.
[REF] Static previews are no longer in mail_service. This was only
used for "OdooBot has a request" preview. This logic has now
been moved to the module `mail_bot` (was previously in `mail`).
[FIX] Title of response of push notifications permission clearly
states whether permission has been granted or denied
(was displaying "[Object object]" before this commit).
Task-ID 1877502
Diffstat (limited to 'addons/mail/static')
5 files changed, 34 insertions, 82 deletions
diff --git a/addons/mail/static/src/js/services/mail_manager.js b/addons/mail/static/src/js/services/mail_manager.js index a9cbf7d1072..734f12f0cf3 100644 --- a/addons/mail/static/src/js/services/mail_manager.js +++ b/addons/mail/static/src/js/services/mail_manager.js @@ -46,7 +46,6 @@ var PREVIEW_MSG_MAX_SIZE = 350; // optimal for native english speakers var MailManager = AbstractService.extend({ dependencies: ['ajax', 'bus_service', 'local_storage'], _ODOOBOT_ID: "ODOOBOT", // default authorID for transient messages - IS_STATIC_PREVIEW_ENABLED: true, /** * @override @@ -232,17 +231,13 @@ var MailManager = AbstractService.extend({ var inboxDef = this._getSystrayInboxPreviews(filter); var failureDef = this._getSystrayMailFailurePreviews(filter); defs = defs.concat([channelDef, inboxDef, failureDef]); - if (this.IS_STATIC_PREVIEW_ENABLED) { - var staticDef = this._getSystrayStaticPreviews(filter); - defs.push(staticDef); - } return $.when.apply($, defs) - .then(function (previewsChannel, previewsInbox, previewsFailure, previewsStatic) { + .then(function (previewsChannel, previewsInbox, previewsFailure) { // order: failures > inbox > channel, each group must be sorted previewsChannel = self._sortPreviews(previewsChannel); previewsInbox = self._sortPreviews(previewsInbox); previewsFailure = self._sortPreviews(previewsFailure); - return _.union(previewsStatic, previewsFailure, previewsInbox, previewsChannel); + return _.union(previewsFailure, previewsInbox, previewsChannel); }); }, /** @@ -817,30 +812,6 @@ var MailManager = AbstractService.extend({ } }, /** - * Get the previews of static systray elements, adding notification request - * - * @private - * @param {string|undefined} [filter] - * @returns {$.Promise<Object[]>} resolved with list of object that are - * compatible with preview template of mail systray menu - */ - _getSystrayStaticPreviews: function (filter) { - var elems = []; - if ( - window.Notification && window.Notification.permission === "default" && - (filter === 'mailbox_inbox' || !filter) - ) { - elems.push({ - title: _t("OdooBot has a request"), - imageSRC: "/mail/static/src/img/odoobot.png", - status: 'bot', - body: _t("Enable desktop notifications to chat"), - id: 'request_notification', - }); - } - return $.when(elems); - }, - /** * Initialize the internal state of the mail service. Ensure that all * attributes are set before doing any operation on them. * diff --git a/addons/mail/static/src/js/systray/systray_messaging_menu.js b/addons/mail/static/src/js/systray/systray_messaging_menu.js index 4fc3e9a4940..5a687131504 100644 --- a/addons/mail/static/src/js/systray/systray_messaging_menu.js +++ b/addons/mail/static/src/js/systray/systray_messaging_menu.js @@ -7,8 +7,6 @@ var SystrayMenu = require('web.SystrayMenu'); var Widget = require('web.Widget'); var QWeb = core.qweb; -var _t = core._t; - /** * Menu item appended in the systray part of the navbar * @@ -92,6 +90,35 @@ var MessagingMenu = Widget.extend({ } }, /** + * Compute the counter next to the systray messaging menu. This counter is + * the sum of unread messages in channels, the counter of the mailbox inbox, + * and the amount of mail failures. + * + * @private + * @returns {integer} + */ + _computeCounter: function () { + var channels = this.call('mail_service', 'getChannels'); + var channelUnreadCounters = _.map(channels, function (channel) { + return channel.getUnreadCounter(); + }); + var unreadChannelCounter = _.reduce(channelUnreadCounters, function (c1, c2) { + return c1 + c2; + }, 0); + var inboxCounter = this.call('mail_service', 'getMailbox', 'inbox').getMailboxCounter(); + var mailFailureCounter = this.call('mail_service', 'getMailFailures').length; + + return unreadChannelCounter + inboxCounter + mailFailureCounter; + }, + /** + * @private + * @returns {$.Promise<Object[]>} resolved with list of previews that are + * compatible with the 'mail.Preview' template. + */ + _getPreviews: function () { + return this.call('mail_service', 'getSystrayPreviews', this._filter); + }, + /** * @private * @return {boolean} whether the messaging menu is shown or not. */ @@ -153,27 +180,6 @@ var MessagingMenu = Widget.extend({ })); }, /** - * Display the browser notification request dialog when the user clicks on systray's corresponding notification - * - * @private - */ - _requestNotificationPermission: function () { - var self = this; - var def = window.Notification && window.Notification.requestPermission(); - if (def) { - def.then(function (value) { - if (value !== 'granted') { - self.call('bus_service', 'sendNotification', self, _t('Permission denied'), - _t('Odoo will not have the permission to send native notifications on this device.')); - } else { - self.call('bus_service', 'sendNotification', self, _t('Permission granted'), - _t('Odoo has now the permission to send you native notifications on this device.')); - } - }); - } - this.$(".o_mail_navbar_request_permission").slideUp(); - }, - /** * Get and render list of previews, based on the selected filter * * preview shows the last message of a channel with inline format. @@ -200,7 +206,7 @@ var MessagingMenu = Widget.extend({ _updatePreviews: function () { // Display spinner while waiting for conversations preview this._$previews.html(QWeb.render('Spinner')); - this.call('mail_service', 'getSystrayPreviews', this._filter) + this._getPreviews() .then(this._renderPreviews.bind(this)); }, /** @@ -222,19 +228,7 @@ var MessagingMenu = Widget.extend({ * @private */ _updateCounter: function () { - var counter; - - var channels = this.call('mail_service', 'getChannels'); - var channelUnreadCounters = _.map(channels, function (channel) { - return channel.getUnreadCounter(); - }); - var unreadChannelCounter = _.reduce(channelUnreadCounters, function (c1, c2) { - return c1 + c2; - }, 0); - var inboxCounter = this.call('mail_service', 'getMailbox', 'inbox').getMailboxCounter(); - var mailFailureCounter = this.call('mail_service', 'getMailFailures').length; - - counter = unreadChannelCounter + inboxCounter + mailFailureCounter; + var counter = this._computeCounter(); this.$('.o_notification_counter').text(counter); this.$el.toggleClass('o_no_notification', !counter); if (this._isShown()) { @@ -289,8 +283,6 @@ var MessagingMenu = Widget.extend({ var documentID = $target.data('document-id'); var documentModel = $target.data('document-model'); this._openDocument(documentModel, documentID); - } else if (previewID === 'request_notification') { - this._requestNotificationPermission(); } else { // preview of thread this.call('mail_service', 'openThread', previewID); @@ -301,7 +293,7 @@ var MessagingMenu = Widget.extend({ * as read * * @private - * @param {MouseEvent} event + * @param {MouseEvent} ev */ _onClickPreviewMarkAsRead: function (ev) { ev.stopPropagation(); diff --git a/addons/mail/static/tests/document_thread_window_tests.js b/addons/mail/static/tests/document_thread_window_tests.js index a14b2ebc159..d7064b8695d 100644 --- a/addons/mail/static/tests/document_thread_window_tests.js +++ b/addons/mail/static/tests/document_thread_window_tests.js @@ -84,12 +84,7 @@ QUnit.module('Document Thread', { partner_id: partnerID, // so that needaction messages are treated as needactions }; this.services = mailTestUtils.getMailServices(); - this.MailService = this.services.mail_service; - this.MailService.prototype.IS_STATIC_PREVIEW_ENABLED = false; }, - afterEach: function () { - this.MailService.prototype.IS_STATIC_PREVIEW_ENABLED = true; - } }); QUnit.test('open a document thread in a thread window', function (assert) { diff --git a/addons/mail/static/tests/systray/systray_messaging_menu_mail_failure_tests.js b/addons/mail/static/tests/systray/systray_messaging_menu_mail_failure_tests.js index 0ef6679c675..c1fc1bd8dae 100644 --- a/addons/mail/static/tests/systray/systray_messaging_menu_mail_failure_tests.js +++ b/addons/mail/static/tests/systray/systray_messaging_menu_mail_failure_tests.js @@ -58,11 +58,8 @@ QUnit.module('MessagingMenu (Mail Failures)', { }; this.services = mailTestUtils.getMailServices(); - this.MailService = this.services.mail_service; - this.MailService.prototype.IS_STATIC_PREVIEW_ENABLED = false; }, afterEach: function () { - this.MailService.prototype.IS_STATIC_PREVIEW_ENABLED = true; // unpatch _.debounce and _.throttle _.debounce = this.underscoreDebounce; _.throttle = this.underscoreThrottle; diff --git a/addons/mail/static/tests/systray/systray_messaging_menu_tests.js b/addons/mail/static/tests/systray/systray_messaging_menu_tests.js index 16458550406..ca0c889039b 100644 --- a/addons/mail/static/tests/systray/systray_messaging_menu_tests.js +++ b/addons/mail/static/tests/systray/systray_messaging_menu_tests.js @@ -93,11 +93,8 @@ QUnit.module('MessagingMenu', { }, }; this.services = mailTestUtils.getMailServices(); - this.MailService = this.services.mail_service; - this.MailService.prototype.IS_STATIC_PREVIEW_ENABLED = false; }, afterEach: function () { - this.MailService.prototype.IS_STATIC_PREVIEW_ENABLED = true; // unpatch _.debounce and _.throttle _.debounce = this.underscoreDebounce; _.throttle = this.underscoreThrottle; |
