summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Totzke <patricktotzke@gmail.com>2013-05-04 19:27:31 +0100
committerPatrick Totzke <patricktotzke@gmail.com>2013-05-04 19:27:31 +0100
commit749f4ef9ec85e4570aa79cb25b49d50320c83c9b (patch)
tree892658d4eacb933ed76eb8dcfecb6a51db0e2c32
parent10a763910c00a299ef9e78d9db6838256e14b906 (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
-rw-r--r--alot/widgets/thread.py50
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')