mirror of https://github.com/OCA/social.git
[IMP] mail_drop_target: Raise a warning when the file has already been imported
parent
3dd2dc9adf
commit
cdc7ac8bdb
|
@ -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,
|
||||
|
|
|
@ -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', {});
|
||||
});
|
||||
}
|
||||
},
|
||||
});
|
||||
});
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue