aboutsummaryrefslogtreecommitdiff
path: root/notmuch-show.c
Commit message (Collapse)AuthorAge
* show: Remove now unused fields from notmuch_show_formatAustin Clements2012-08-03
| | | | | The message_set_{begin,sep,end} and null_message fields are no longer used because we now use the structure printer provided by the format.
* show: Convert do_show to use sprinterAustin Clements2012-08-03
|
* show: Convert show_message to use sprinterAustin Clements2012-08-03
| | | | | | | | | | Unlike the previous patches, this function is used for all formats. However, for formats other than the JSON format, the sprinter methods used by show_message are all no-ops, so this code continues to function correctly for all of the formats. Converting show_message eliminates show_null_message in the process, since this maps directly to an sprinter method.
* show: Convert envelope format_part_json to use sprinterAustin Clements2012-08-03
|
* show: Convert non-envelope format_part_json to use sprinterAustin Clements2012-08-03
|
* show: Convert format_part_sigstatus_json to use sprinterAustin Clements2012-08-03
|
* show: Convert format_headers_json to use sprinterAustin Clements2012-08-03
| | | | | | This no longer requires a talloc context (not that it really did before since it didn't return anything), so we remove its context argument.
* show: Feed the sprinter down to part formattersAustin Clements2012-08-03
| | | | | | There are several levels of function calls between where we create the sprinter and the call to the part formatter in show_message. This feeds the sprinter through all of them and into the part formatters.
* show: Associate an sprinter with each formatAustin Clements2012-08-03
| | | | | | | This associates an sprinter constructor with each show format and uses this to construct the appropriate sprinter. Currently nothing is done with this sprinter, but the following patches will weave it through the layers of notmuch show.
* cli: add --body=true|false option to notmuch-show.cMark Walters2012-07-24
| | | | | | | | | | This option allows the caller to suppress the output of the bodies of the messages. Currently this is only implemented for format=json. This is used by notmuch-pick.el (although not needed) because it gives a speed-up of at least a factor of a two (and in some cases a speed up of more than a factor of 8); moreover it reduces the memory usage in emacs hugely.
* cli: notmuch-show.c fix whitespace errorMark Walters2012-06-29
| | | | | Fix an existing whitespace error since it is right next to the changes of this series.
* cli: make --entire-thread=false work for format=json.Mark Walters2012-06-29
| | | | | | | | | | The --entire-thread option in notmuch-show.c defaults to true when format=json. Previously there was no way to turn this off. This patch makes it respect --entire-thread=false. To do this the patch moves the --entire-thread option to be a keyword option using the new command line parsing to allow the existing --entire-thread to keep working.
* cli: Let json output "null" messages for non --entire-threadMark Walters2012-06-29
| | | | | | | All formats except Json can output empty messages for non entire-thread, but in Json format we output "null" to keep the other elements (e.g. the replies to the omitted message) in the correct place.
* cli: use new notmuch_crypto_get_context in mime-node.cJameson Graef Rollins2012-06-10
| | | | | | | | This has the affect of lazily creating the crypto contexts only when needed. This removes code duplication from notmuch-show and notmuch-reply, and should speed up these functions considerably if the crypto flags are provided but the messages don't have any cryptographic parts.
* cli: new crypto verify flag to handle verificationJameson Graef Rollins2012-06-10
| | | | | | | Use this flag rather than depend on the existence of an initialized gpgctx, to determine whether we should verify a multipart/signed. We will be moving to create the ctx lazily, so we don't want to depend on it being previously initialized if it's not needed.
* cli: modify mime_node_open to take new crypto struct as argumentJameson Graef Rollins2012-06-10
| | | | This simplifies the interface considerably.
* cli: modify show and reply to use new crypto structJameson Graef Rollins2012-06-10
| | | | | notmuch_show_params_t is modified to use the new notmuch_crypto_t, and notmuch-show and notmuch-reply are modified accordingly.
* lib/cli: Make notmuch_database_open return a status codeAustin Clements2012-05-05
| | | | | | | | | | | | It has been a long-standing issue that notmuch_database_open doesn't return any indication of why it failed. This patch changes its prototype to return a notmuch_status_t and set an out-argument to the database itself, like other functions that return both a status and an object. In the interest of atomicity, this also updates every use in the CLI so that notmuch still compiles. Since this patch does not update the bindings, the Python bindings test fails.
* Use notmuch_database_destroy instead of notmuch_database_closeJustus Winter2012-04-28
| | | | | | Adapt the notmuch binaries source to the notmuch_database_close split. Signed-off-by: Justus Winter <4winter@informatik.uni-hamburg.de>
* show: Remove empty message_set_{start,sep,end} fieldsAustin Clements2012-04-15
| | | | Setting these to NULL is equivalent to the empty string now.
* show: Support NULL values for message_set_{start, sep, end}Austin Clements2012-04-15
| | | | | Many formats don't need these, so it's more convenient if they don't have to set them at all.
* show: Remove support for old-style formatters in show_messageAustin Clements2012-04-15
| | | | | show_message used to have a compatibility path for old-style formatters. This removes that.
* cli: move show to the new --exclude= option naming scheme.Mark Walters2012-04-07
| | | | | | | | | | | | | | This moves notmuch show to the --exclude=(true|false) naming scheme. When exclude=false show returns all threads that match including those that only match in an excluded message. The excluded messages are flagged. When exclude=true the behaviour depends on whether --entire-thread is set. If it is not set then show only returns the messages which match and are not excluded. If it is set then show returns all messages in the threads that match in a non-excluded message, flagging the excluded messages in these threads. The rationale is that it is awkward to use a thread with some missing messages.
* show/reply: Unify the code that extracts text partsAustin Clements2012-03-31
| | | | | | | | | Previously, show and reply had separate implementations of decoding and printing text parts. Now both use show's implementation, which was more complete. Show's implementation has been extended with an option to add reply quoting to the extracted part (this is implemented as a named flag to avoid naked booleans, even though it's the only flag it can take).
* reply: Add a JSON reply format.Adam Wolfe Gordon2012-03-19
| | | | | | | | This new JSON format for replies includes headers generated for a reply message as well as the headers of the original message. Using this data, a client can intelligently create a reply. For example, the emacs client will be able to create replies with quoted HTML parts by parsing the HTML parts.
* show: Convert raw format to the new self-recursive style, properly support ↵Austin Clements2012-03-18
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | 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.
* show: Move format_part_content_raw with the other new-style formatsAustin Clements2012-03-18
| | | | Just code motion.
* show: Convert mbox format to new self-recursive styleAustin Clements2012-03-18
| | | | Given the lack of recursion, this is pretty easy.
* show: Move format_message_mbox with the other new-style formatsAustin Clements2012-03-18
| | | | Just code motion.
* show: Allow formatters to return errorsAustin Clements2012-03-18
| | | | | | | Formatter errors are propagated to the exit status of notmuch show. This isn't used by the JSON or text formatters, but it will be useful for the raw format, which is pickier.
* cli: omit excluded messages in results where appropriate.Mark Walters2012-03-02
| | | | | | | | | | | | | In all cases of notmuch count/search/show where the results returned cannot reflect the exclude flag return just the matched not-excluded results. If the caller wishes to have all the matched results (i.e., including the excluded ones) they should call with the --no-exclude option. The relevant cases are count: both threads and messages search: all cases except the summary view show: mbox format
* cli: Make notmuch-show respect excludes.Mark Walters2012-03-02
| | | | | | | | This adds the excludes to notmuch-show.c. We do not exclude when only a single message (or part) is requested. notmuch-show will output the exclude information when either text or json format is requested. As this changes the output from notmuch-show it breaks many tests (in a trivial and expected fashion).
* show: Further general simplifications of the JSON formatterAustin Clements2012-03-01
|
* show: Make format_part_sigstatus_json's API consistent between GMIME 2.4 and 2.6Austin Clements2012-03-01
| | | | | The implementation is still different for GMIME 2.4 and 2.6, but at least now the caller doesn't have to be aware of this.
* show: Make JSON helper functions print complete objectsAustin Clements2012-03-01
| | | | | This makes the main recursive function easier to follow because helper functions don't add fields to the running object.
* show: Simplify talloc use in format_headers_jsonAustin Clements2012-03-01
| | | | Previously there was an unnecessary talloc context.
* show: Unify JSON header output for messages and message partsAustin Clements2012-03-01
| | | | | | | | | This has three ramifications: - Blank To and Cc headers are no longer output for messages. - Dates are now canonicalized for messages, which means they always have a day of the week and GMT is printed +0000 (never -0000) - Invalid From message headers are handled slightly differently, since they get parsed by GMime now instead of notmuch.
* show: Use consistent header ordering in the JSON formatAustin Clements2012-03-01
| | | | | | | Previously, top-level message headers were printed as Subject, From, To, Date, while embedded message headers were printed From, To, Subject, Date. This makes both cases use the former order and updates the tests accordingly.
* show: Convert JSON format to the new self-recursive styleAustin Clements2012-03-01
| | | | | | | | | | | As before, this is all code movement and a smidgen of glue. This moves the existing JSON formatter code into one self-recursive function, but doesn't change any of the logic to take advantage of the new structure. In general, "leafs" of the JSON structure are left in helper functions (most of them untouched), so that it's easy to see the overall structure of the format from the main recursive function.
* Document the JSON schemata used by show and searchAustin Clements2012-02-27
|
* cli: reach previously unreachable cleanup code in "notmuch show"Jani Nikula2012-02-12
| | | | | | | The last lines of notmuch_show_command() function were unreachable. Fix it by using a variable for return value. Signed-off-by: Jani Nikula <jani@nikula.org>
* cli: convert "notmuch show" to use the new argument parserJani Nikula2012-02-12
| | | | | | | | | | | | | | | | | Use the new notmuch argument parser to handle arguments in "notmuch show". There are three minor functional changes: 1) Also set params.raw = TRUE when defaulting to raw format when part is requested but format is not specified. This was a bug, and --part=0 without --format=raw did not work previously. 2) Set params.decrypt = FALSE if crypto context creation fails. 3) Only use the parameters for the last --format if specified multiple times. Previously this could have resulted in a non-working mixture of parameters. Signed-off-by: Jani Nikula <jani@nikula.org>
* cli: use notmuch_bool_t for boolean fields in notmuch_show_params_tJani Nikula2012-02-12
| | | | | | | Use notmuch_bool_t instead of int for entire_thread, raw, and decrypt boolean fields in notmuch_show_params_t. No functional changes. Signed-off-by: Jani Nikula <jani@nikula.org>
* show: Simplify new text formatter codeAustin Clements2012-02-12
| | | | | | | | | | | This makes the text formatter take advantage of the new code structure. The previously duplicated header logic is now unified, several things that we used to compute repeatedly across different callbacks are now computed once, and the code is simpler overall and 32% shorter. Unifying the header logic causes this to format some dates slightly differently, so the two affected test cases are updated.
* show: Convert text format to the new self-recursive styleAustin Clements2012-02-12
| | | | | | | | | | This is all code movement and a smidgen of glue. This moves the existing text formatter code into one self-recursive function, but doesn't change any of the logic. The next patch will actually take advantage of what the new structure has to offer. Note that this patch retains format_headers_message_part_text because it is also used by the raw format.
* show: Introduce mime_node formatter callbackAustin Clements2012-01-25
| | | | | | | | | This callback is the gateway to the new mime_node_t-based formatters. This maintains backwards compatibility so the formatters can be transitioned one at a time. Once all formatters are converted, the formatter structure can be reduced to only message_set_{start,sep,end} and part, most of show_message can be deleted, and all of show-message.c can be deleted.
* show: Use consistent header ordering in the text formatAustin Clements2012-01-23
| | | | | | | | | | Previously, top-level message headers were printed as Subject, From, To, Date, while embedded message headers were printed From, To, Subject, Date. This makes both cases use the former order and updates the tests accordingly. Strangely, the raw format also uses this function, so this also fixes the two raw format tests affected by this change.
* show: don't use hex literals in JSON outputThomas Jost2012-01-22
| | | | | | | | | | | | | | | JSON does not support hex literals (0x..) so numbers must be formatted as %d instead of %x. Currently, the possible values for the gmime error code are 1 (expired signature), 2 (no public key), 4 (expired key) and 8 (revoked key). The other possible value is 16 (unsupported algorithm) but obviously it is much more rare. If this happens, the current code will add '"errors": 10'. This is valid JSON (it looks like a decimal number) but it is incorrect (should be 16, not 10). Since this is just an issue in the JSON encoder, no changes are needed on the Emacs side (or in other UIs using the JSON output).
* Add compatibility with gmime 2.6Thomas Jost2012-01-21
| | | | | | | | | | | | | | There are lots of API changes in gmime 2.6 crypto handling. By adding preprocessor directives, it is however possible to add gmime 2.6 compatibility while preserving compatibility with gmime 2.4 too. This is mostly based on id:"8762i8hrb9.fsf@bookbinder.fernseed.info". This was tested against both gmime 2.6.4 and 2.4.31. With gmime 2.4.31, the crypto tests all work fine (as expected). With gmime 2.6.4, one crypto test is currently broken (signature verification with signer key unavailable), most likely because of a bug in gmime which will hopefully be fixed in a future version.
* show: Handle read and write errorsAustin Clements2012-01-21
| | | | | | | | | | | | | For showing a message in raw format, rather than silently succeeding when a read or a write fails (or, probably, looping if a read fails), try to print an error message and exit with a non-zero status. This silences one of the buildbot warnings about unused results. While my libc lacks the declarations that trigger these warnings, this can be tested by adding the following to notmuch.h: __attribute__((warn_unused_result)) size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);