From 2f7aa40d6f48f725eca629ff8a47eb8922467032 Mon Sep 17 00:00:00 2001 From: Folker Bernitt Date: Tue, 11 Aug 2015 10:17:55 +0200 Subject: Fixed unit test. --- .../pixelated/adapter/mailstore/leap_mailstore.py | 33 ++++++++++++++++++++-- service/pixelated/adapter/search/__init__.py | 10 +++++-- service/pixelated/adapter/services/mail_service.py | 3 +- 3 files changed, 39 insertions(+), 7 deletions(-) (limited to 'service/pixelated') diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py index 1bcab036..df9a9b44 100644 --- a/service/pixelated/adapter/mailstore/leap_mailstore.py +++ b/service/pixelated/adapter/mailstore/leap_mailstore.py @@ -21,7 +21,7 @@ from pixelated.adapter.mailstore.body_parser import BodyParser from pixelated.adapter.mailstore.mailstore import MailStore, underscore_uuid from leap.mail.mail import Message -from pixelated.adapter.model.mail import Mail +from pixelated.adapter.model.mail import Mail, InputMail class LeapMail(Mail): @@ -39,7 +39,7 @@ class LeapMail(Mail): cpy = dict(self._headers) for name in set(self._headers.keys()).intersection(['To', 'Cc', 'Bcc']): - cpy[name] = self._headers[name].split(',') if self._headers[name] else None + cpy[name] = self._headers[name].split(',') if self._headers[name] else [] return cpy @@ -85,9 +85,36 @@ class LeapMail(Mail): 'ident': self._mail_id, 'tags': self.tags, 'status': list(self.status), - 'body': self._body + 'body': self._body, + 'textPlainBody': self._body, + 'replying': self._replying_dict(), + 'mailbox': self._mailbox_name.lower() } + def _replying_dict(self): + result = {'single': None, 'all': {'to-field': [], 'cc-field': []}} + + sender_mail = self.headers.get('Reply-To', self.headers.get('From')) + # Issue #215: Fix for existing mails without any from address. + if sender_mail is None: + sender_mail = InputMail.FROM_EMAIL_ADDRESS + + recipients = self._reply_recipient('To') + recipients.append(sender_mail) + ccs = self._reply_recipient('Cc') + + result['single'] = sender_mail + result['all']['to-field'] = recipients + result['all']['cc-field'] = ccs + return result + + def _reply_recipient(self, kind): + recipients = self.headers.get(kind, []) + if not recipients: + recipients = [] + + return [recipient for recipient in recipients if recipient != InputMail.FROM_EMAIL_ADDRESS] + class LeapMailStore(MailStore): __slots__ = ('soledad') diff --git a/service/pixelated/adapter/search/__init__.py b/service/pixelated/adapter/search/__init__.py index e1ce5e8c..46691926 100644 --- a/service/pixelated/adapter/search/__init__.py +++ b/service/pixelated/adapter/search/__init__.py @@ -129,9 +129,9 @@ class SearchEngine(object): 'sender': self._unicode_header_field(header.get('from', '')), 'subject': self._unicode_header_field(header.get('subject', '')), 'date': milliseconds(header.get('date', '')), - 'to': u','.join([h for h in header.get('to', [''])]), - 'cc': u','.join([h for h in header.get('cc', [''])]), - 'bcc': u','.join([h for h in header.get('bcc', [''])]), + 'to': self._format_recipient(header, 'to'), + 'cc': self._format_recipient(header, 'cc'), + 'bcc': self._format_recipient(header, 'bcc'), 'tag': u','.join(unique(tags)), 'bounced': u','.join(bounced), 'body': unicode(mdict['textPlainBody'] if 'textPlainBody' in mdict else mdict['body']), @@ -142,6 +142,10 @@ class SearchEngine(object): writer.update_document(**index_data) + def _format_recipient(self, headers, name): + list = headers.get(name, ['']) + return u','.join(list) if list else u'' + def _unicode_header_field(self, field_value): if not field_value: return None diff --git a/service/pixelated/adapter/services/mail_service.py b/service/pixelated/adapter/services/mail_service.py index 0c2884ed..b3f58448 100644 --- a/service/pixelated/adapter/services/mail_service.py +++ b/service/pixelated/adapter/services/mail_service.py @@ -71,7 +71,7 @@ class MailService(object): return [_use_current_casing(new_tag.lower()) if new_tag.lower() in current_tags_lower else new_tag for new_tag in new_tags] def mail(self, mail_id): - return self.mail_store.get_mail(mail_id) + return self.mail_store.get_mail(mail_id, include_body=True) def attachment(self, attachment_id, encoding): return self.querier.attachment(attachment_id, encoding) @@ -115,6 +115,7 @@ class MailService(object): @defer.inlineCallbacks def delete_mail(self, mail_id): mail = yield self.mail(mail_id) + print 'go mail %s' % mail if mail.mailbox_name.upper() == u'TRASH': yield self.mail_store.delete_mail(mail_id) else: -- cgit v1.2.3