summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--alot/db.py15
-rw-r--r--alot/widgets.py11
3 files changed, 17 insertions, 11 deletions
diff --git a/TODO b/TODO
index c198fbaf..8d0396dd 100644
--- a/TODO
+++ b/TODO
@@ -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
diff --git a/alot/db.py b/alot/db.py
index 5ce8bc4c..dbbe96c6 100644
--- a/alot/db.py
+++ b/alot/db.py
@@ -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', '')