[IMP] mail_drop_target: Raise a warning when the file has already been imported

pull/503/head
Enric Tobella 2019-09-05 13:42:08 +02:00
parent 3dd2dc9adf
commit cdc7ac8bdb
3 changed files with 56 additions and 26 deletions

View File

@ -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,

View File

@ -1,9 +1,9 @@
//-*- coding: utf-8 -*-
//Copyright 2018 Therp BV <https://therp.nl>
//License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
// -*- coding: utf-8 -*-
// Copyright 2018 Therp BV <https://therp.nl>
// 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', {});
});
}
},
});
});

View File

@ -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()