diff options
author | Patrick Totzke <patricktotzke@gmail.com> | 2013-05-04 19:27:31 +0100 |
---|---|---|
committer | Patrick Totzke <patricktotzke@gmail.com> | 2013-05-04 19:27:31 +0100 |
commit | 749f4ef9ec85e4570aa79cb25b49d50320c83c9b (patch) | |
tree | 892658d4eacb933ed76eb8dcfecb6a51db0e2c32 /alot/widgets/thread.py | |
parent | 10a763910c00a299ef9e78d9db6838256e14b906 (diff) |
Fix duplicate display of headers
This separates the code dealing with
the case "display all headers" from the case
"display selected heders" in `MesageTree.construct_header_pile`
and ensures that 1. in "all in" case, no headers will be duplicated
and 2. in the filtered case, the order of headers given in
the whitelist parameter) is preserved.
fixes #601
Diffstat (limited to 'alot/widgets/thread.py')
-rw-r--r-- | alot/widgets/thread.py | 50 |
1 files changed, 27 insertions, 23 deletions
diff --git a/alot/widgets/thread.py b/alot/widgets/thread.py index 5d2e2bda..17b43883 100644 --- a/alot/widgets/thread.py +++ b/alot/widgets/thread.py @@ -271,33 +271,37 @@ class MessageTree(CollapsibleTree): def construct_header_pile(self, headers=None, normalize=True): mail = self._message.get_email() + lines = [] + if headers is None: + # collect all header/value pairs in the order they appear headers = mail.keys() + for key, value in mail.items(): + dvalue = decode_header(value, normalize=normalize) + lines.append((key, dvalue)) else: - headers = [k for k in headers if - k.lower() == 'tags' or k in mail] - - lines = [] - for key in headers: - if key in mail: - if key.lower() in ['cc', 'bcc', 'to']: - values = mail.get_all(key) - values = [decode_header( - v, normalize=normalize) for v in values] + # only a selection of headers should be displayed. + # use order of the `headers` parameter + for key in headers: + if key in mail: + if key.lower() in ['cc', 'bcc', 'to']: + values = mail.get_all(key) + values = [decode_header( + v, normalize=normalize) for v in values] + lines.append((key, ', '.join(values))) + else: + for value in mail.get_all(key): + dvalue = decode_header(value, normalize=normalize) + lines.append((key, dvalue)) + elif key.lower() == 'tags': + logging.debug('want tags header') + values = [] + for t in self._message.get_tags(): + tagrep = settings.get_tagstring_representation(t) + if t is not tagrep['translated']: + t = '%s (%s)' % (tagrep['translated'], t) + values.append(t) lines.append((key, ', '.join(values))) - else: - for value in mail.get_all(key): - dvalue = decode_header(value, normalize=normalize) - lines.append((key, dvalue)) - elif key.lower() == 'tags': - logging.debug('want tags header') - values = [] - for t in self._message.get_tags(): - tagrep = settings.get_tagstring_representation(t) - if t is not tagrep['translated']: - t = '%s (%s)' % (tagrep['translated'], t) - values.append(t) - lines.append((key, ', '.join(values))) key_att = settings.get_theming_attribute('thread', 'header_key') value_att = settings.get_theming_attribute('thread', 'header_value') |