summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2020-03-04 17:44:04 +0100
committerAnton Khirnov <anton@khirnov.net>2020-03-04 17:44:04 +0100
commit238be3bafed5c9f4aa8015c85ffe429fb698443a (patch)
tree53cd20a66d1714338a3a8e415c08f2cc14dbcf87
parenta558da1fd4ee9e3768ade72ea097704ad5dcd812 (diff)
db/utils: drop decode_header()
It is almost entirely unnecessary - python's email messages decode the headers themselves. Do the "normalization" bit directly in the single place where it is done, though properly there should be more thorough message text sanitization somewhere (most likely in our message wrapper).
-rw-r--r--alot/commands/thread.py13
-rw-r--r--alot/db/utils.py28
-rw-r--r--alot/widgets/thread.py7
3 files changed, 10 insertions, 38 deletions
diff --git a/alot/commands/thread.py b/alot/commands/thread.py
index eb95a9bc..0e306eef 100644
--- a/alot/commands/thread.py
+++ b/alot/commands/thread.py
@@ -26,7 +26,6 @@ from .common import RetagPromptCommand
from .envelope import SendCommand
from ..completion.contacts import ContactsCompleter
from ..completion.path import PathCompleter
-from ..db.utils import decode_header
from ..db.utils import formataddr
from ..db.utils import extract_headers
from ..db.utils import extract_body
@@ -158,7 +157,7 @@ class ReplyCommand(Command):
envelope = Envelope(bodytext=mailcontent, replied=self.message)
# copy subject
- subject = decode_header(mail.get('Subject', ''))
+ subject = mail.get('Subject', '')
reply_subject_hook = settings.get_hook('reply_subject')
if reply_subject_hook:
subject = reply_subject_hook(subject)
@@ -224,7 +223,7 @@ class ReplyCommand(Command):
# copy cc for group-replies
if 'Cc' in mail:
cc = clear_my_address(account, mail.get_all('Cc', []))
- envelope.add('Cc', decode_header(', '.join(cc)))
+ envelope.add('Cc', ', '.join(cc))
to = ', '.join(ensure_unique_address(recipients))
logging.debug('reply to: %s', to)
@@ -246,7 +245,7 @@ class ReplyCommand(Command):
envelope.__delitem__('To')
# Finally setup the 'To' header
- envelope.add('To', decode_header(to))
+ envelope.add('To', to)
# if any of the recipients is a mailinglist that we are subscribed to,
# set Mail-Followup-To header so that duplicates are avoided
@@ -258,7 +257,7 @@ class ReplyCommand(Command):
if any(addr in lists for n, addr in getaddresses(allrecipients)):
followupto = ', '.join(allrecipients)
logging.debug('mail followup to: %s', followupto)
- envelope.add('Mail-Followup-To', decode_header(followupto))
+ envelope.add('Mail-Followup-To', followupto)
# set In-Reply-To header
envelope.add('In-Reply-To', '<%s>' % self.message.id)
@@ -347,7 +346,7 @@ class ForwardCommand(Command):
envelope.attach(Attachment(original_mail))
# copy subject
- subject = decode_header(mail.get('Subject', ''))
+ subject = mail.get('Subject', '')
subject = 'Fwd: ' + subject
forward_subject_hook = settings.get_hook('forward_subject')
if forward_subject_hook:
@@ -470,7 +469,7 @@ class EditNewCommand(Command):
to_copy = ['Subject', 'From', 'To', 'Cc', 'Bcc', 'In-Reply-To',
'References']
for key in to_copy:
- value = decode_header(mail.get(key, ''))
+ value = mail.get(key, '')
if value:
envelope.add(key, value)
diff --git a/alot/db/utils.py b/alot/db/utils.py
index 86c4718b..8a96df14 100644
--- a/alot/db/utils.py
+++ b/alot/db/utils.py
@@ -323,7 +323,7 @@ def extract_headers(mail, headers=None):
for key in headers:
value = ''
if key in mail:
- value = decode_header(mail.get(key, ''))
+ value = mail.get(key, '')
headertext += '%s: %s\n' % (key, value)
return headertext
@@ -474,32 +474,6 @@ def formataddr(pair):
return "{0} <{1}>".format(name, address)
-def decode_header(header, normalize=False):
- """
- decode a header value to a unicode string
-
- values are usually a mixture of different substrings
- encoded in quoted printable using different encodings.
- This turns it into a single unicode string
-
- :param header: the header value
- :type header: str
- :param normalize: replace trailing spaces after newlines
- :type normalize: bool
- :rtype: str
- """
- logging.debug("unquoted header: |%s|", header)
-
- valuelist = email.header.decode_header(header)
- decoded_list = []
- for v, enc in valuelist:
- v = string_decode(v, enc)
- decoded_list.append(string_sanitize(v))
- value = ''.join(decoded_list)
- if normalize:
- value = re.sub(r'\n\s+', r' ', value)
- return value
-
def is_subdir_of(subpath, superpath):
# make both absolute
diff --git a/alot/widgets/thread.py b/alot/widgets/thread.py
index 0096188d..db0af0e0 100644
--- a/alot/widgets/thread.py
+++ b/alot/widgets/thread.py
@@ -11,10 +11,9 @@ import urwid
from .globals import TagWidget
from .globals import AttachmentWidget
from ..settings.const import settings
-from ..db.utils import decode_header, X_SIGNATURE_MESSAGE_HEADER
+from ..db.utils import X_SIGNATURE_MESSAGE_HEADER
from ..helper import string_sanitize
-
class MessageSummaryWidget(urwid.WidgetWrap):
"""
one line summary of a :class:`~alot.db.message.Message`.
@@ -60,7 +59,7 @@ class MessageSummaryWidget(urwid.WidgetWrap):
mail = self.message.get_email()
subj = mail.get_all('subject', [''])
- subj = ','.join([decode_header(s, normalize = True) for s in subj])
+ subj = re.sub(r'\n\s+', r' ', ','.join(subj))
author, address = self.message.get_author()
date = self.message.get_datestring()
@@ -128,7 +127,7 @@ class HeadersWidget(urwid.WidgetWrap):
# TODO even/odd
keyw = ('fixed', max_key_len + 1,
urwid.Text((self._key_attr, key)))
- valuew = urwid.Text((self._value_attr, decode_header(value)))
+ valuew = urwid.Text((self._value_attr, value))
linew = urwid.AttrMap(urwid.Columns([keyw, valuew]), self._gaps_attr)
widgets.append(linew)