show: Convert raw format to the new self-recursive style, properly support interior...
authorAustin Clements <amdragon@MIT.EDU>
Tue, 6 Mar 2012 18:48:43 +0000 (18:48 +0000)
committerDavid Bremner <bremner@debian.org>
Sun, 18 Mar 2012 12:14:22 +0000 (09:14 -0300)
commitb1130bc71c02efb504ad723b56f86618fd186a67
tree2388fd9c836c076df841182a60d9fe586f1e0b6c
parent7e1742a82c4b52f5337d8db53347d547a4ac67b4
show: Convert raw format to the new self-recursive style, properly support interior parts

This is fully compatible for root and leaf parts, but now has proper
support for interior parts.  This requires some design decisions that
were guided by what I would want if I were to save a part.
Specifically:

- Leaf parts are printed without headers and with transfer decoding.
  This is what makes sense for saving attachments.  (Furthermore, the
  transfer decoding is necessary since, without the headers, the
  caller would not be able to interpret non-transfer-decoded output.)

- Message parts are printed with their message headers, but without
  enclosing part headers.  This is what makes sense for saving a
  message as a whole (which is a message part) and for saving attached
  messages.  This is symmetric for whole messages and for attached
  messages, though we special-case the whole message for performance
  reasons (and corner-case correctness reasons: given malformed input,
  GMime may not be able to reproduce it from the parsed
  representation).

- Multipart parts are printed with their headers and all child parts.
  It's not clear what the best thing to do for multipart is, but this
  was the most natural to implement and can be justified because such
  parts can't be interpreted without their headers.

As an added benefit, we can move the special-case code for part 0 into
the raw formatter.
notmuch-show.c
test/multipart