diff options
-rw-r--r-- | alot/buffers.py | 2 | ||||
-rw-r--r-- | alot/commands/globals.py | 22 | ||||
-rw-r--r-- | alot/message.py | 21 | ||||
-rw-r--r-- | alot/widgets.py | 12 |
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) |