summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--alot/buffers.py2
-rw-r--r--alot/commands/globals.py22
-rw-r--r--alot/message.py21
-rw-r--r--alot/widgets.py12
4 files changed, 34 insertions, 23 deletions
diff --git a/alot/buffers.py b/alot/buffers.py
index 8e312c56..6313110e 100644
--- a/alot/buffers.py
+++ b/alot/buffers.py
@@ -120,7 +120,7 @@ class EnvelopeBuffer(Buffer):
lines = []
for (k, v) in self.envelope.headers.items():
if (k not in hidden) or self.all_headers:
- lines.append((k, decode_header(v)))
+ lines.append((k, v))
self.header_wgt = widgets.HeadersList(lines)
displayed_widgets.append(self.header_wgt)
diff --git a/alot/commands/globals.py b/alot/commands/globals.py
index 1124e1b3..1c6045d7 100644
--- a/alot/commands/globals.py
+++ b/alot/commands/globals.py
@@ -20,7 +20,6 @@ from alot import helper
from alot.db import DatabaseLockedError
from alot.completion import ContactsCompleter
from alot.completion import AccountCompleter
-from alot.message import encode_header
from alot.message import decode_header
from alot.message import Envelope
from alot import commands
@@ -432,19 +431,19 @@ class ComposeCommand(Command):
# set forced headers
for key, value in self.headers.items():
- self.envelope.headers[key] = encode_header(key, value)
+ self.envelope.headers[key] = value
# set forced headers for separate parameters
if self.sender:
- self.envelope['From'] = encode_header('From', self.sender)
+ self.envelope['From'] = self.sender
if self.subject:
- self.envelope['Subject'] = encode_header('Subject', self.subject)
+ self.envelope['Subject'] = self.subject
if self.to:
- self.envelope['To'] = encode_header('To', ','.join(self.to))
+ self.envelope['To'] = ','.join(self.to)
if self.cc:
- self.envelope['Cc'] = encode_header('Cc', ','.join(self.cc))
+ self.envelope['Cc'] = ','.join(self.cc)
if self.bcc:
- self.envelope['Bcc'] = encode_header('Bcc', ','.join(self.bcc))
+ self.envelope['Bcc'] = ','.join(self.bcc)
# get missing From header
if not 'From' in self.envelope.headers:
@@ -452,7 +451,7 @@ class ComposeCommand(Command):
if len(accounts) == 1:
a = accounts[0]
fromstring = "%s <%s>" % (a.realname, a.address)
- self.envelope['From'] = encode_header('From', fromstring)
+ self.envelope['From'] = fromstring
else:
cmpl = AccountCompleter(ui.accountman)
fromaddress = yield ui.prompt(prefix='From>', completer=cmpl,
@@ -463,7 +462,7 @@ class ComposeCommand(Command):
a = ui.accountman.get_account_by_address(fromaddress)
if a is not None:
fromstring = "%s <%s>" % (a.realname, a.address)
- self.envelope['From'] = encode_header('From', fromstring)
+ self.envelope['From'] = fromstring
else:
self.envelope.headers['From'] = fromaddress
@@ -484,14 +483,15 @@ class ComposeCommand(Command):
if to == None:
ui.notify('canceled')
return
- self.envelope.headers['To'] = encode_header('to', to)
+ self.envelope.headers['To'] = to
if settings.config.getboolean('general', 'ask_subject') and \
not 'Subject' in self.envelope.headers:
subject = yield ui.prompt(prefix='Subject>')
+ ui.logger.debug('SUBJECT: "%s"' % subject)
if subject == None:
ui.notify('canceled')
return
- self.envelope['Subject'] = encode_header('subject', subject)
+ self.envelope['Subject'] = subject
cmd = commands.envelope.EditCommand(envelope=self.envelope)
ui.apply_command(cmd)
diff --git a/alot/message.py b/alot/message.py
index 553755c9..1be0e05c 100644
--- a/alot/message.py
+++ b/alot/message.py
@@ -67,10 +67,16 @@ class Message(object):
def get_email(self):
"""returns :class:`email.Message` for this message"""
+ path = self.get_filename()
+ warning = "Subject: Caution!\n"\
+ "Message file is no longer accessible:\n%s" % path
if not self._email:
- f_mail = open(self.get_filename())
- self._email = email.message_from_file(f_mail)
- f_mail.close()
+ try:
+ f_mail = open(path)
+ self._email = email.message_from_file(f_mail)
+ f_mail.close()
+ except IOError:
+ self._email = email.message_from_string(warning)
return self._email
def get_date(self):
@@ -461,13 +467,14 @@ class Envelope(object):
else:
msg = textpart
for k, v in self.headers.items():
- msg[k] = v
+ msg[k] = encode_header(k, v)
for a in self.attachments:
msg.attach(a)
logging.debug(msg)
return msg
def parse_template(self, tmp):
+ logging.debug('GoT: """\n%s\n"""' % tmp)
m = re.match('(?P<h>([a-zA-Z0-9_-]+:.+\n)*)(?P<b>(\s*.*)*)', tmp)
assert m
@@ -482,11 +489,9 @@ class Envelope(object):
for line in headertext.splitlines():
if re.match('[a-zA-Z0-9_-]+:', line): # new k/v pair
if key and value: # save old one from stack
- #del self.mail.headers[key] # ensure unique values in mails
- self.headers[key] = encode_header(key, value) # save
+ self.headers[key] = value # save
key, value = line.strip().split(':', 1) # parse new pair
elif key and value: # append new line without key prefix
value += line
if key and value: # save last one if present
- #del self.headers[key]
- self.headers[key] = encode_header(key, value)
+ self.headers[key] = value
diff --git a/alot/widgets.py b/alot/widgets.py
index f0a37e85..bc9e14a7 100644
--- a/alot/widgets.py
+++ b/alot/widgets.py
@@ -381,9 +381,12 @@ class MessageWidget(urwid.WidgetWrap):
hw = self._get_header_widget()
aw = self._get_attachment_widget()
bw = self._get_body_widget()
- self.displayed_list = [self.sumline, hw, bw]
+ self.displayed_list = [self.sumline]
+ if hw:
+ self.displayed_list.append(hw)
if aw:
- self.displayed_list.insert(2, aw)
+ self.displayed_list.append(aw)
+ self.displayed_list.append(bw)
else:
self.displayed_list = [self.sumline]
self.pile = urwid.Pile(self.displayed_list)
@@ -413,10 +416,13 @@ class MessageWidget(urwid.WidgetWrap):
def _get_header_widget(self, force_update=False):
"""creates/returns the widget that displays the mail header"""
+ if not self.displayed_headers:
+ return None
if not self.headerw or force_update:
mail = self.message.get_email()
- #build lines
+ # normalize values if only filtered list is shown
norm = not (self.displayed_headers == self.all_headers)
+ #build lines
lines = []
for k in self.displayed_headers:
v = mail.get(k)