diff options
-rw-r--r-- | TODO | 2 | ||||
-rw-r--r-- | alot/db.py | 15 | ||||
-rw-r--r-- | alot/widgets.py | 11 |
3 files changed, 17 insertions, 11 deletions
@@ -40,11 +40,11 @@ ui.commandline: ui: * current bindings in header like mutt? + * notifier class called by ui.notify()? This would enable different subclasses to implement growl/libnotify or just internal popups general * gg, g5j.. combos like in vim * pydoc/sphinx - * handle errors with nonexisting mime handlers (mailcap) * update dependencies in setup.py. Do we have to include all these? cmd subprocess,shlex @@ -24,6 +24,7 @@ from collections import deque from settings import config import helper +DB_ENC = 'utf8' class DBManager: """ @@ -155,14 +156,14 @@ class Thread: def __init__(self, dbman, thread): self.dbman = dbman self.tid = thread.get_thread_id() - self.strrep = str(thread) + self.strrep = str(thread).decode(DB_ENC) self.total_messages = thread.get_total_messages() self.topmessages = [m.get_message_id() for m in thread.get_toplevel_messages()] - self.authors = thread.get_authors() - self.subject = thread.get_subject() + self.authors = thread.get_authors().decode(DB_ENC) + self.subject = thread.get_subject().decode(DB_ENC) self.oldest = datetime.fromtimestamp(thread.get_oldest_date()) self.newest = datetime.fromtimestamp(thread.get_newest_date()) - self.tags = set([str(tag) for tag in thread.get_tags()]) + self.tags = set([str(tag).decode(DB_ENC) for tag in thread.get_tags()]) def get_thread_id(self): return self.tid @@ -224,10 +225,10 @@ class Message: self.dbman = dbman self.mid = msg.get_message_id() self.datetime = datetime.fromtimestamp(msg.get_date()) - self.sender = msg.get_header('From') - self.strrep = str(msg) + self.sender = msg.get_header('From').decode(DB_ENC) + self.strrep = str(msg).decode(DB_ENC) self.email = None # will be read upon first use - self.tags = set([str(tag) for tag in msg.get_tags()]) + self.tags = set([str(tag).decode(DB_ENC) for tag in msg.get_tags()]) def __str__(self): return self.strrep diff --git a/alot/widgets.py b/alot/widgets.py index b388b04c..ae1fecbe 100644 --- a/alot/widgets.py +++ b/alot/widgets.py @@ -358,7 +358,10 @@ class MessageSummaryWidget(urwid.WidgetWrap): class MessageHeaderWidget(urwid.AttrMap): - """displays a "key:value\n" list of email headers""" + """ + displays a "key:value\n" list of email headers. + RFC 2822 style encoded values are decoded into utf8 first. + """ def __init__(self, eml, displayed_headers=None): """ @@ -379,8 +382,10 @@ class MessageHeaderWidget(urwid.AttrMap): for key in displayed_headers: #todo: parse from,cc,bcc seperately into name-addr-widgets if key in eml: - value = reduce(lambda x, y: x + y[0], - email.header.decode_header(eml[key]), '') + valuelist = email.header.decode_header(eml[key]) + value = '' + for v,enc in valuelist: + value = value + v.decode(enc) #sanitize it a bit: value = value.replace('\t', '') value = value.replace('\r', '') |