From 49f7f8aeeb0eb12025d47ade9190dee528763ca5 Mon Sep 17 00:00:00 2001 From: Enric Tobella Date: Thu, 5 Sep 2019 13:42:08 +0200 Subject: [PATCH] [IMP] mail_drop_target: Raise a warning when the file has already been imported --- mail_drop_target/models/mail_thread.py | 27 +++++++++++- .../static/src/js/mail_drop_target.js | 41 +++++++++---------- .../tests/test_mail_drop_target.py | 14 +++++-- 3 files changed, 56 insertions(+), 26 deletions(-) diff --git a/mail_drop_target/models/mail_thread.py b/mail_drop_target/models/mail_thread.py index f85df0627..ce2061612 100644 --- a/mail_drop_target/models/mail_thread.py +++ b/mail_drop_target/models/mail_thread.py @@ -11,6 +11,30 @@ from odoo import _, api, exceptions, models class MailThread(models.AbstractModel): _inherit = 'mail.thread' + @api.model + def message_drop(self, model, message, custom_values=None, + save_original=False, strip_attachments=False, + thread_id=None): + result = self.message_process( + model, message, custom_values=custom_values, + save_original=save_original, strip_attachments=strip_attachments, + thread_id=thread_id + ) + if not result: + return self.message_drop_existing( + model, message, custom_values=custom_values, + save_original=save_original, + strip_attachments=strip_attachments, thread_id=thread_id + ) + return result + + @api.model + def message_drop_existing(self, model, message, + custom_values=None, save_original=False, + strip_attachments=False, thread_id=None): + message = _("This message is already imported.") + raise exceptions.Warning(message) + @api.model def message_process_msg( self, model, message, custom_values=None, save_original=False, @@ -28,12 +52,13 @@ class MailThread(models.AbstractModel): message_msg._getStream('__substg1.0_10130102') or message_msg.body, email_cc=message_msg.cc, headers={'date': message_msg.date}, + message_id=message_msg.message_id, attachments=[ (attachment.longFilename, attachment.data) for attachment in message_msg.attachments ], ) - return self.message_process( + return self.message_drop( model, message_email.as_string(), custom_values=custom_values, save_original=save_original, strip_attachments=strip_attachments, thread_id=thread_id, diff --git a/mail_drop_target/static/src/js/mail_drop_target.js b/mail_drop_target/static/src/js/mail_drop_target.js index a6d39e5c5..0faac4686 100644 --- a/mail_drop_target/static/src/js/mail_drop_target.js +++ b/mail_drop_target/static/src/js/mail_drop_target.js @@ -1,9 +1,9 @@ -//-*- coding: utf-8 -*- -//Copyright 2018 Therp BV -//License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). +// -*- coding: utf-8 -*- +// Copyright 2018 Therp BV +// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html). -odoo.define('mail_drop_target', function(require) -{ +odoo.define('mail_drop_target', function (require) { + "use strict"; var Chatter = require('mail.Chatter'); var web_drop_target = require('web_drop_target'); @@ -11,12 +11,12 @@ odoo.define('mail_drop_target', function(require) Chatter.include({ _drop_allowed_types: ['message/rfc822'], - _get_drop_item: function(e) { + _get_drop_item: function (e) { var dataTransfer = e.originalEvent.dataTransfer; - if( - dataTransfer.items.length == 1 && - dataTransfer.items[0].type == '' && - dataTransfer.items[0].kind == 'file' + if ( + dataTransfer.items.length === 1 && + dataTransfer.items[0].type === '' && + dataTransfer.items[0].kind === 'file' ) { // this might be an outlook msg file return dataTransfer.items[0]; @@ -24,16 +24,16 @@ odoo.define('mail_drop_target', function(require) return this._super.apply(this, arguments); }, - _handle_drop_items: function(drop_items, e) { + _handle_drop_items: function (drop_items, e) { var self = this; _.each(drop_items, function(item, e) { return self._handle_file_drop_proxy(item, e); }); }, - _handle_file_drop_proxy: function(item, e) { + _handle_file_drop_proxy: function (item, e) { var self = this; var file = item; - if(!file || !(file instanceof Blob)) { + if (!file || !(file instanceof Blob)) { return; } var reader = new FileReader(); @@ -43,7 +43,7 @@ odoo.define('mail_drop_target', function(require) reader.onerror = self.proxy('_file_reader_error_handler'); reader.readAsArrayBuffer(file); }, - _handle_file_drop: function(drop_file, reader, e) { + _handle_file_drop: function (drop_file, reader, e) { var self = this, mail_processor = '', data = ''; @@ -53,9 +53,9 @@ odoo.define('mail_drop_target', function(require) new Uint8Array(reader.result) ); } else { - mail_processor = 'message_process'; + mail_processor = 'message_drop'; var reader_array = new Uint8Array(reader.result); - data = "" + data = ""; for (var i = 0; i < reader_array.length; i++) { data += String.fromCharCode(parseInt(reader_array[i])); } @@ -68,11 +68,10 @@ odoo.define('mail_drop_target', function(require) args: [this.record.model, data], kwargs: { thread_id: this.record.data.id, - } - }) - .then(function() { - self.trigger_up('reload',{}); + }, + }).then(function() { + self.trigger_up('reload', {}); }); - } + }, }); }); diff --git a/mail_drop_target/tests/test_mail_drop_target.py b/mail_drop_target/tests/test_mail_drop_target.py index 86b0a44e5..979d7d159 100644 --- a/mail_drop_target/tests/test_mail_drop_target.py +++ b/mail_drop_target/tests/test_mail_drop_target.py @@ -1,5 +1,5 @@ from odoo.tests.common import TransactionCase -from odoo import addons, exceptions, tools +from odoo import exceptions, tools from mock import patch import base64 @@ -21,6 +21,9 @@ class TestMailDropTarget(TransactionCase): self.partner._name, message, thread_id=self.partner.id) self.partner.refresh() self.assertEqual(comments+1, len(self.partner.message_ids)) + with self.assertRaises(exceptions.Warning): + self.partner.message_drop( + self.partner._name, message, thread_id=self.partner.id) def test_msg(self): message = base64.b64encode(tools.file_open( @@ -33,10 +36,13 @@ class TestMailDropTarget(TransactionCase): self.partner._name, message, thread_id=self.partner.id) self.partner.refresh() self.assertEqual(comments+1, len(self.partner.message_ids)) + with self.assertRaises(exceptions.Warning): + self.partner.message_process_msg( + self.partner._name, message, thread_id=self.partner.id) def test_no_msgextract(self): - with self.assertRaises(exceptions.UserError), patch.object( - addons.mail_drop_target.models.mail_thread, 'Message', - __nonzero__=lambda x: False, + with self.assertRaises(exceptions.UserError), patch( + 'odoo.addons.mail_drop_target.models.mail_thread.Message', + new=False, ): self.test_msg()