From 749f4ef9ec85e4570aa79cb25b49d50320c83c9b Mon Sep 17 00:00:00 2001 From: Patrick Totzke Date: Sat, 4 May 2013 19:27:31 +0100 Subject: 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 --- alot/widgets/thread.py | 50 +++++++++++++++++++++++++++----------------------- 1 file changed, 27 insertions(+), 23 deletions(-) (limited to 'alot/widgets') 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') -- cgit v1.2.3