diff --git a/mail_archives/README.rst b/mail_archives/README.rst index 4d06ddf..3b2d013 100644 --- a/mail_archives/README.rst +++ b/mail_archives/README.rst @@ -5,11 +5,11 @@ Adds Archive menu, which shows all messages Usage ----- -Click by archive menu item and receive all messages +Click Messaing/Arhive menu -- all messages are displayed Further information ------------------- HTML Description: https://apps.odoo.com/apps/modules/9.0/mail_archives/ -Tested on Odoo 9.0 \ No newline at end of file +Tested on Odoo 9.0 b9f206953e3f877adf18643f154d1262842564ee \ No newline at end of file diff --git a/mail_archives/__openerp__.py b/mail_archives/__openerp__.py index 6fb0495..3dcd07f 100644 --- a/mail_archives/__openerp__.py +++ b/mail_archives/__openerp__.py @@ -7,7 +7,7 @@ "version": "1.0.0", "author": "IT-Projects LLC, Pavel Romanchenko", - "website": "http://www.it-projects.info", + "website": "https://www.it-projects.info", "license": "LGPL-3", "depends": [ diff --git a/mail_archives/models/models.py b/mail_archives/models/models.py index a3a40fa..16e8093 100644 --- a/mail_archives/models/models.py +++ b/mail_archives/models/models.py @@ -1,15 +1,3 @@ # -*- coding: utf-8 -*- from openerp import models, fields, api - -# class mail_arhives(models.Model): -# _name = 'mail_arhives.mail_arhives' - -# name = fields.Char() -# value = fields.Integer() -# value2 = fields.Float(compute="_value_pc", store=True) -# description = fields.Text() -# -# @api.depends('value') -# def _value_pc(self): -# self.value2 = float(self.value) / 100 \ No newline at end of file diff --git a/mail_archives/static/src/js/archives.js b/mail_archives/static/src/js/archives.js index fb499ed..8020389 100644 --- a/mail_archives/static/src/js/archives.js +++ b/mail_archives/static/src/js/archives.js @@ -37,23 +37,20 @@ base_obj.MailTools.include({ get_domain: function(channel){ return (channel.id === "channel_archive") ? [] : this._super.apply(this, arguments); - }, + } +}); - start: function(){ +// Change chat_manager with override methods +base_obj.chat_manager.is_ready.then(function(){ // Add archive channel - this.add_channel({ + base_obj.chat_manager.mail_tools.add_channel({ id: "channel_archive", name: _t("Archive"), type: "static" }); - return $.when(this._super.apply(this, arguments)); - } -}); - -// Change chat_manager with override methods -var cls = new base_obj.MailTools(base_obj.chat_manager); -base_obj.chat_manager.is_ready = cls.start(); + return $.when(); + }); return base_obj.chat_manager; diff --git a/mail_archives/static/src/xml/menu.xml b/mail_archives/static/src/xml/menu.xml index b4dcb23..2e8166a 100644 --- a/mail_archives/static/src/xml/menu.xml +++ b/mail_archives/static/src/xml/menu.xml @@ -9,17 +9,11 @@ -
- -
Congratulations, your inbox is empty
-
New messages appear here.
+ + + +
Archive is empty
+
- -
No starred message
-
You can mark any message as 'starred', and it shows up in this channel.
-
- -
Archive is empty
-
-
+ diff --git a/mail_archives/views/views.xml b/mail_archives/views/views.xml index dc3a5bb..35855a3 100644 --- a/mail_archives/views/views.xml +++ b/mail_archives/views/views.xml @@ -1,59 +1,4 @@ - - - - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/mail_base/README.rst b/mail_base/README.rst index ed52ea7..a467263 100644 --- a/mail_base/README.rst +++ b/mail_base/README.rst @@ -1,11 +1,12 @@ Mail Base ========= -Module contain common code for other mail modules +Modules doesn't introduce new features, but make built-in mail js features extendable. Usage ----- - +To use this module you need either install module that depends on it or create new module. Further information ------------------- +Due to odoo restrictions, module makes mail initialization again. That is browser loads emoji and other chat data twice. This is the only way to make Mail feature extendable. diff --git a/mail_base/__openerp__.py b/mail_base/__openerp__.py index c16ca84..1a2731c 100644 --- a/mail_base/__openerp__.py +++ b/mail_base/__openerp__.py @@ -1,13 +1,13 @@ # -*- coding: utf-8 -*- { - "name": "mail_base", - "summary": """Contain common code for other mail modules""", - "category": "Uncategorized", + "name": "Mail Base", + "summary": """Makes Mail extendable""", + "category": "Discuss", "images": [], "version": "1.0.0", "author": "IT-Projects LLC, Pavel Romanchenko", - "website": "http://www.it-projects.info", + "website": "https://www.it-projects.info", "license": "LGPL-3", "depends": [ diff --git a/mail_base/static/src/js/base.js b/mail_base/static/src/js/base.js index 8687ba2..a56d780 100644 --- a/mail_base/static/src/js/base.js +++ b/mail_base/static/src/js/base.js @@ -60,7 +60,6 @@ var channel_seen = _.throttle(function (channel) { return ChannelModel.call('channel_seen', [[channel.id]], {}, {shadow: true}); }, 3000); - var MailTools = core.Class.extend({ send_native_notification: function (title, content) { @@ -319,7 +318,7 @@ var MailTools = core.Class.extend({ chat_manager.bus.trigger("channel_toggle_fold", channel); } } else { - channel = chat_manager.make_channel(data, options); + channel = chat_manager.mail_tools.make_channel(data, options); channels.push(channel); channels = _.sortBy(channels, function (channel) { return channel.name.toLowerCase(); }); if (!options.silent) { @@ -696,49 +695,6 @@ var MailTools = core.Class.extend({ dm.status = data.im_status; chat_manager.bus.trigger('update_dm_presence', dm); } - }, - - start: function(){ - this.add_channel({ - id: "channel_inbox", - name: _t("Inbox"), - type: "static" - }, { display_needactions: true }); - - this.add_channel({ - id: "channel_starred", - name: _t("Starred"), - type: "static" - }); - - var load_channels = session.rpc('/mail/client_action').then(function (result) { - _.each(result.channel_slots, function (channels) { - _.each(channels, cls.add_channel); - }); - needaction_counter = result.needaction_inbox_counter; - mention_partner_suggestions = result.mention_partner_suggestions; - }); - - var load_emojis = session.rpc("/mail/chat_init").then(function (result) { - emojis = result.emoji; - _.each(emojis, function(emoji) { - emoji_substitutions[_.escape(emoji.source)] = emoji.substitution; - }); - }); - - var ir_model = new Model("ir.model.data"); - var load_menu_id = ir_model.call("xmlid_to_res_id", ["mail.mail_channel_menu_root_chat"], {}, {shadow: true}); - var load_action_id = ir_model.call("xmlid_to_res_id", ["mail.mail_channel_action_client_chat"], {}, {shadow: true}); - - bus.on('notification', null, cls.on_notification); - - return $.when(load_menu_id, load_action_id, load_channels, load_emojis).then(function (menu_id, action_id) { - discuss_ids = { - menu_id: menu_id, - action_id: action_id - }; - bus.start_polling(); - }); } }); @@ -746,9 +702,14 @@ var cls = new MailTools(); // Public interface //---------------------------------------------------------------------------------- -// these two functions are exposed for extensibility purposes and shouldn't be called by other modules -chat_manager.make_message = cls.make_message; -chat_manager.make_channel = cls.make_channel; +chat_manager.mail_tools = cls; +// we add this function this way in order to make them extendable via MailTools.include({...}) +chat_manager.make_message = function(){ + chat_manager.mail_tools.make_message.apply(chat_manager.mail_tools, arguments) +}; +chat_manager.make_channel = function(){ + chat_manager.mail_tools.make_channel.apply(chat_manager.mail_tools, arguments) +}; chat_manager.post_message = function (data, options) { options = options || {}; var msg = { @@ -782,7 +743,7 @@ chat_manager.post_message = function (data, options) { return MessageModel.call('message_format', [msg_id]).then(function (msgs) { msgs[0].model = options.model; msgs[0].res_id = options.res_id; - cls.add_message(msgs[0]); + chat_manager.mail_tools.add_message(msgs[0]); }); }); } @@ -796,21 +757,21 @@ chat_manager.get_messages = function (options) { if ('channel_id' in options && options.load_more) { // get channel messages, force load_more channel = this.get_channel(options.channel_id); - return cls.fetch_from_channel(channel, {domain: options.domain || {}, load_more: true}); + return chat_manager.mail_tools.fetch_from_channel(channel, {domain: options.domain || {}, load_more: true}); } if ('channel_id' in options) { // channel message, check in cache first channel = this.get_channel(options.channel_id); - var channel_cache = cls.get_channel_cache(channel, options.domain); + var channel_cache = chat_manager.mail_tools.get_channel_cache(channel, options.domain); if (channel_cache.loaded) { return $.when(channel_cache.messages); } else { - return cls.fetch_from_channel(channel, {domain: options.domain}); + return chat_manager.mail_tools.fetch_from_channel(channel, {domain: options.domain}); } } if ('ids' in options) { // get messages from their ids (chatter is the main use case) - return cls.fetch_document_messages(options.ids, options).then(function(result) { + return chat_manager.mail_tools.fetch_document_messages(options.ids, options).then(function(result) { chat_manager.mark_as_read(options.ids); return result; }); @@ -820,7 +781,7 @@ chat_manager.get_messages = function (options) { // 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, cls.add_message); + return _.map(msgs, chat_manager.mail_tools.add_message); }); } }; @@ -855,8 +816,8 @@ chat_manager.undo_mark_as_read = function (message_ids, channel) { }; chat_manager.mark_channel_as_seen = function (channel) { if (channel.unread_counter > 0 && channel.type !== 'static') { - cls.update_channel_unread_counter(channel, 0); - cls.channel_seen(channel); + chat_manager.mail_tools.update_channel_unread_counter(channel, 0); + chat_manager.mail_tools.channel_seen(channel); } }; chat_manager.get_channels = function () { @@ -869,7 +830,7 @@ chat_manager.get_dm_from_partner_id = function (partner_id) { return _.findWhere(channels, {direct_partner_id: partner_id}); }; chat_manager.all_history_loaded = function (channel, domain) { - return cls.get_channel_cache(channel, domain).all_history_loaded; + return chat_manager.mail_tools.get_channel_cache(channel, domain).all_history_loaded; }; chat_manager.get_mention_partner_suggestions = function (channel) { if (!channel) { @@ -935,7 +896,7 @@ chat_manager.create_channel = function (name, type) { return ChannelModel .call(method, args) - .then(cls.add_channel); + .then(chat_manager.mail_tools.add_channel); }; chat_manager.join_channel = function (channel_id, options) { if (channel_id in channel_defs) { @@ -950,13 +911,13 @@ chat_manager.join_channel = function (channel_id, options) { channel_defs[channel_id] = ChannelModel .call('channel_join_and_get_info', [[channel_id]]) .then(function (result) { - return cls.add_channel(result, options); + return chat_manager.mail_tools.add_channel(result, options); }); } return channel_defs[channel_id]; }; chat_manager.open_and_detach_dm = function (partner_id) { - return ChannelModel.call('channel_get_and_minimize', [[partner_id]]).then(cls.add_channel); + return ChannelModel.call('channel_get_and_minimize', [[partner_id]]).then(chat_manager.mail_tools.add_channel); }; chat_manager.open_channel = function (channel) { chat_manager.bus.trigger(client_action_open ? 'open_channel' : 'detach_channel', channel); @@ -969,7 +930,7 @@ chat_manager.unsubscribe = function (channel) { def = ChannelModel.call('channel_pin', [channel.uuid, false]); } return def.then(function () { - cls.remove_channel(channel); + chat_manager.mail_tools.remove_channel(channel); }); }; chat_manager.close_chat_session = function (channel_id) { @@ -1045,7 +1006,7 @@ chat_manager.get_channels_preview = function (channels) { _.each(missing_channels, function (channel_preview) { var channel = _.findWhere(channels, {id: channel_preview.id}); if (channel) { - channel_preview.last_message = cls.add_message(channel.last_message); + channel_preview.last_message = chat_manager.mail_tools.add_message(channel.last_message); } }); return _.filter(channels_preview, function (channel) { @@ -1054,7 +1015,7 @@ chat_manager.get_channels_preview = function (channels) { }); }; chat_manager.get_message_body_preview = function (message_body) { - return cls.parse_and_transform(message_body, inline); + return chat_manager.mail_tools.parse_and_transform(message_body, inline); }; chat_manager.search_partner = function (search_val, limit) { return PartnerModel.call('im_search', [search_val, limit || 20], {}, {shadow: true}).then(function(result) { @@ -1069,12 +1030,58 @@ chat_manager.search_partner = function (search_val, limit) { return values; }); }; -chat_manager.send_native_notification = cls.send_native_notification; +chat_manager.send_native_notification = function(){ + chat_manager.mail_tools.send_native_notification.apply(chat_manager.mail_tools, arguments) +}; chat_manager.bus.on('client_action_open', null, function (open) { client_action_open = open; }); -chat_manager.is_ready = cls.start(); +// In order to extend init use chat_manager.is_ready Derrered object. See example in mail_arhive module +function init(){ + chat_manager.mail_tools.add_channel({ + id: "channel_inbox", + name: _t("Inbox"), + type: "static" + }, { display_needactions: true }); + + chat_manager.mail_tools.add_channel({ + id: "channel_starred", + name: _t("Starred"), + type: "static" + }); + + var load_channels = session.rpc('/mail/client_action').then(function (result) { + _.each(result.channel_slots, function (channels) { + _.each(channels, chat_manager.mail_tools.add_channel); + }); + needaction_counter = result.needaction_inbox_counter; + mention_partner_suggestions = result.mention_partner_suggestions; + }); + + var load_emojis = session.rpc("/mail/chat_init").then(function (result) { + emojis = result.emoji; + _.each(emojis, function(emoji) { + emoji_substitutions[_.escape(emoji.source)] = emoji.substitution; + }); + }); + + var ir_model = new Model("ir.model.data"); + var load_menu_id = ir_model.call("xmlid_to_res_id", ["mail.mail_channel_menu_root_chat"], {}, {shadow: true}); + var load_action_id = ir_model.call("xmlid_to_res_id", ["mail.mail_channel_action_client_chat"], {}, {shadow: true}); + + bus.on('notification', null, chat_manager.mail_tools.on_notification); + + return $.when(load_menu_id, load_action_id, load_channels, load_emojis).then(function (menu_id, action_id) { + discuss_ids = { + menu_id: menu_id, + action_id: action_id + }; + bus.start_polling(); + }); +} + +chat_manager.is_ready = init(); return { chat_manager: chat_manager, MailTools: MailTools diff --git a/res_partner_mails_count/README.rst b/res_partner_mails_count/README.rst index 8a14292..25b2a27 100644 --- a/res_partner_mails_count/README.rst +++ b/res_partner_mails_count/README.rst @@ -13,4 +13,4 @@ Further information HTML Description: https://apps.odoo.com/apps/modules/9.0/res_partner_mails_count/ -Tested on Odoo 9.0 \ No newline at end of file +Tested on Odoo 9.0 b9f206953e3f877adf18643f154d1262842564ee \ No newline at end of file diff --git a/res_partner_mails_count/views/res_partner_mails_count.xml b/res_partner_mails_count/views/res_partner_mails_count.xml index 11f4302..0c1573c 100644 --- a/res_partner_mails_count/views/res_partner_mails_count.xml +++ b/res_partner_mails_count/views/res_partner_mails_count.xml @@ -14,19 +14,5 @@

- - - - - - - - - - - - - -