summaryrefslogtreecommitdiff
path: root/service/pixelated/adapter
diff options
context:
space:
mode:
authorFolker Bernitt <fbernitt@thoughtworks.com>2015-08-11 10:17:55 +0200
committerFolker Bernitt <fbernitt@thoughtworks.com>2015-08-11 17:00:34 +0200
commit2f7aa40d6f48f725eca629ff8a47eb8922467032 (patch)
treedefb0da3c392059ac2e679664bc985d78f20709a /service/pixelated/adapter
parent9ed58715616f5c6341d32c9b0316933d3f2b4a3e (diff)
Fixed unit test.
Diffstat (limited to 'service/pixelated/adapter')
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py33
-rw-r--r--service/pixelated/adapter/search/__init__.py10
-rw-r--r--service/pixelated/adapter/services/mail_service.py3
3 files changed, 39 insertions, 7 deletions
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: