mirror of https://github.com/OCA/social.git
[IMP] mail_drop_target: Raise a warning when the file has already been imported
parent
ec9d75b9ac
commit
49f7f8aeeb
|
@ -11,6 +11,30 @@ from odoo import _, api, exceptions, models
|
||||||
class MailThread(models.AbstractModel):
|
class MailThread(models.AbstractModel):
|
||||||
_inherit = 'mail.thread'
|
_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
|
@api.model
|
||||||
def message_process_msg(
|
def message_process_msg(
|
||||||
self, model, message, custom_values=None, save_original=False,
|
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,
|
message_msg._getStream('__substg1.0_10130102') or message_msg.body,
|
||||||
email_cc=message_msg.cc,
|
email_cc=message_msg.cc,
|
||||||
headers={'date': message_msg.date},
|
headers={'date': message_msg.date},
|
||||||
|
message_id=message_msg.message_id,
|
||||||
attachments=[
|
attachments=[
|
||||||
(attachment.longFilename, attachment.data)
|
(attachment.longFilename, attachment.data)
|
||||||
for attachment in message_msg.attachments
|
for attachment in message_msg.attachments
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
return self.message_process(
|
return self.message_drop(
|
||||||
model, message_email.as_string(), custom_values=custom_values,
|
model, message_email.as_string(), custom_values=custom_values,
|
||||||
save_original=save_original, strip_attachments=strip_attachments,
|
save_original=save_original, strip_attachments=strip_attachments,
|
||||||
thread_id=thread_id,
|
thread_id=thread_id,
|
||||||
|
|
|
@ -2,8 +2,8 @@
|
||||||
// Copyright 2018 Therp BV <https://therp.nl>
|
// Copyright 2018 Therp BV <https://therp.nl>
|
||||||
// License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl.html).
|
// 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 Chatter = require('mail.Chatter');
|
||||||
var web_drop_target = require('web_drop_target');
|
var web_drop_target = require('web_drop_target');
|
||||||
|
|
||||||
|
@ -14,9 +14,9 @@ odoo.define('mail_drop_target', function(require)
|
||||||
_get_drop_item: function (e) {
|
_get_drop_item: function (e) {
|
||||||
var dataTransfer = e.originalEvent.dataTransfer;
|
var dataTransfer = e.originalEvent.dataTransfer;
|
||||||
if (
|
if (
|
||||||
dataTransfer.items.length == 1 &&
|
dataTransfer.items.length === 1 &&
|
||||||
dataTransfer.items[0].type == '' &&
|
dataTransfer.items[0].type === '' &&
|
||||||
dataTransfer.items[0].kind == 'file'
|
dataTransfer.items[0].kind === 'file'
|
||||||
) {
|
) {
|
||||||
// this might be an outlook msg file
|
// this might be an outlook msg file
|
||||||
return dataTransfer.items[0];
|
return dataTransfer.items[0];
|
||||||
|
@ -53,9 +53,9 @@ odoo.define('mail_drop_target', function(require)
|
||||||
new Uint8Array(reader.result)
|
new Uint8Array(reader.result)
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
mail_processor = 'message_process';
|
mail_processor = 'message_drop';
|
||||||
var reader_array = new Uint8Array(reader.result);
|
var reader_array = new Uint8Array(reader.result);
|
||||||
data = ""
|
data = "";
|
||||||
for (var i = 0; i < reader_array.length; i++) {
|
for (var i = 0; i < reader_array.length; i++) {
|
||||||
data += String.fromCharCode(parseInt(reader_array[i]));
|
data += String.fromCharCode(parseInt(reader_array[i]));
|
||||||
}
|
}
|
||||||
|
@ -68,11 +68,10 @@ odoo.define('mail_drop_target', function(require)
|
||||||
args: [this.record.model, data],
|
args: [this.record.model, data],
|
||||||
kwargs: {
|
kwargs: {
|
||||||
thread_id: this.record.data.id,
|
thread_id: this.record.data.id,
|
||||||
}
|
},
|
||||||
})
|
}).then(function() {
|
||||||
.then(function() {
|
|
||||||
self.trigger_up('reload', {});
|
self.trigger_up('reload', {});
|
||||||
});
|
});
|
||||||
}
|
},
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from odoo.tests.common import TransactionCase
|
from odoo.tests.common import TransactionCase
|
||||||
from odoo import addons, exceptions, tools
|
from odoo import exceptions, tools
|
||||||
from mock import patch
|
from mock import patch
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
|
@ -21,6 +21,9 @@ class TestMailDropTarget(TransactionCase):
|
||||||
self.partner._name, message, thread_id=self.partner.id)
|
self.partner._name, message, thread_id=self.partner.id)
|
||||||
self.partner.refresh()
|
self.partner.refresh()
|
||||||
self.assertEqual(comments+1, len(self.partner.message_ids))
|
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):
|
def test_msg(self):
|
||||||
message = base64.b64encode(tools.file_open(
|
message = base64.b64encode(tools.file_open(
|
||||||
|
@ -33,10 +36,13 @@ class TestMailDropTarget(TransactionCase):
|
||||||
self.partner._name, message, thread_id=self.partner.id)
|
self.partner._name, message, thread_id=self.partner.id)
|
||||||
self.partner.refresh()
|
self.partner.refresh()
|
||||||
self.assertEqual(comments+1, len(self.partner.message_ids))
|
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):
|
def test_no_msgextract(self):
|
||||||
with self.assertRaises(exceptions.UserError), patch.object(
|
with self.assertRaises(exceptions.UserError), patch(
|
||||||
addons.mail_drop_target.models.mail_thread, 'Message',
|
'odoo.addons.mail_drop_target.models.mail_thread.Message',
|
||||||
__nonzero__=lambda x: False,
|
new=False,
|
||||||
):
|
):
|
||||||
self.test_msg()
|
self.test_msg()
|
||||||
|
|
Loading…
Reference in New Issue