summaryrefslogtreecommitdiff
path: root/service/pixelated
diff options
context:
space:
mode:
authormnandri <mnandri@eumguccion.corporate.thoughtworks.com>2015-12-07 16:53:39 +0100
committermnandri <mnandri@eumguccion.corporate.thoughtworks.com>2015-12-07 16:53:49 +0100
commitfa1299aca064d2ac347a3e14d4c2169335a8f40c (patch)
tree52dd015527cd7f30c11ee84de5e5523954fefb0f /service/pixelated
parent6df57ef709f0a19e467a5a88bc854f4e5f8e00f7 (diff)
#454 added utf-8 encoding on message body, and corresponding query search term
Diffstat (limited to 'service/pixelated')
-rw-r--r--service/pixelated/adapter/mailstore/leap_mailstore.py4
-rw-r--r--service/pixelated/adapter/search/__init__.py4
-rw-r--r--service/pixelated/resources/mails_resource.py12
-rwxr-xr-xservice/pixelated/utils.py22
4 files changed, 34 insertions, 8 deletions
diff --git a/service/pixelated/adapter/mailstore/leap_mailstore.py b/service/pixelated/adapter/mailstore/leap_mailstore.py
index 90035d20..14b0e417 100644
--- a/service/pixelated/adapter/mailstore/leap_mailstore.py
+++ b/service/pixelated/adapter/mailstore/leap_mailstore.py
@@ -27,6 +27,8 @@ from pixelated.adapter.mailstore.mailstore import MailStore, underscore_uuid
from leap.mail.mail import Message
from pixelated.adapter.model.mail import Mail, InputMail
+from pixelated.utils import to_unicode
+
class AttachmentInfo(object):
def __init__(self, ident, name, encoding):
@@ -41,7 +43,7 @@ class LeapMail(Mail):
self._mail_id = mail_id
self._mailbox_name = mailbox_name
self._headers = headers if headers is not None else {}
- self._body = body
+ self._body = to_unicode(body)
self.tags = set(tags) # TODO test that asserts copy
self._flags = set(flags) # TODO test that asserts copy
self._attachments = attachments
diff --git a/service/pixelated/adapter/search/__init__.py b/service/pixelated/adapter/search/__init__.py
index 065dd5e5..8d0b1f4e 100644
--- a/service/pixelated/adapter/search/__init__.py
+++ b/service/pixelated/adapter/search/__init__.py
@@ -31,6 +31,8 @@ from whoosh import sorting
from pixelated.support.functional import unique
import traceback
+from pixelated.utils import to_unicode
+
class SearchEngine(object):
DEFAULT_INDEX_HOME = os.path.join(os.environ['HOME'], '.leap')
@@ -132,7 +134,7 @@ class SearchEngine(object):
'cc': self._format_recipient(header, 'cc'),
'bcc': self._format_recipient(header, 'bcc'),
'tag': u','.join(unique(tags)),
- 'body': unicode(mdict['textPlainBody'] if 'textPlainBody' in mdict else mdict['body']),
+ 'body': to_unicode(mdict.get('textPlainBody', mdict.get('body', ''))),
'ident': unicode(mdict['ident']),
'flags': unicode(','.join(unique(mail.flags))),
'raw': unicode(mail.raw)
diff --git a/service/pixelated/resources/mails_resource.py b/service/pixelated/resources/mails_resource.py
index 34dd042a..613c5e6f 100644
--- a/service/pixelated/resources/mails_resource.py
+++ b/service/pixelated/resources/mails_resource.py
@@ -7,10 +7,9 @@ from twisted.web.resource import Resource
from twisted.web import server
from twisted.internet import defer
from twisted.python.log import err
-from leap.common.events import (
- register,
- catalog as events
-)
+from leap.common import events
+
+from pixelated.utils import to_unicode
class MailsUnreadResource(Resource):
@@ -120,7 +119,7 @@ class MailsResource(Resource):
delivery_error_mail = InputMail.delivery_error_template(delivery_address=event.content)
self._mail_service.mailboxes.inbox.add(delivery_error_mail)
- register(events.SMTP_SEND_MESSAGE_ERROR, callback=on_error)
+ events.register(events.catalog.SMTP_SEND_MESSAGE_ERROR, callback=on_error)
def __init__(self, mail_service, draft_service):
Resource.__init__(self)
@@ -136,7 +135,8 @@ class MailsResource(Resource):
def render_GET(self, request):
query, window_size, page = request.args.get('q')[0], request.args.get('w')[0], request.args.get('p')[0]
- d = self._mail_service.mails(query, window_size, page)
+ unicode_query = to_unicode(query)
+ d = self._mail_service.mails(unicode_query, window_size, page)
d.addCallback(lambda (mails, total): {
"stats": {
diff --git a/service/pixelated/utils.py b/service/pixelated/utils.py
new file mode 100755
index 00000000..2e0f1f88
--- /dev/null
+++ b/service/pixelated/utils.py
@@ -0,0 +1,22 @@
+#
+# Copyright (c) 2015 ThoughtWorks, Inc.
+#
+# Pixelated is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Pixelated is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with Pixelated. If not, see <http://www.gnu.org/licenses/>.
+
+
+def to_unicode(text):
+ if text and not isinstance(text, unicode):
+ encoding = 'utf-8'
+ return unicode(text, encoding=encoding)
+ return text