aboutsummaryrefslogtreecommitdiff
path: root/notmuch-reply.c
AgeCommit message (Collapse)Author
2012-01-14cli: slightly refactor "notmuch reply" address scanning functionsJani Nikula
Slightly refactor "notmuch reply" recipient and user from address scanning functions in preparation for reply-to-sender feature. Add support for not adding recipients at all (just scan for user from address), and returning the number of recipients added. No externally visible functional changes. Signed-off-by: Jani Nikula <jani@nikula.org>
2012-01-09cli: convert "notmuch reply" to use the new argument parserJani Nikula
Use the new notmuch argument parser to handle arguments in "notmuch reply". There should be no functional changes. Signed-off-by: Jani Nikula <jani@nikula.org>
2012-01-09cli: fix use of uninitialized variable in "notmuch reply"Jani Nikula
notmuch_show_params_t params is only initialized partially in notmuch_reply_command(). The only field that is used uninitialized is params.decrypt. It is usually non-zero, making "notmuch reply" on encrypted messages work by coincidence. Initialize params properly, and set params.decrypt as needed. Signed-off-by: Jani Nikula <jani@nikula.org>
2011-12-25show: Pass notmuch_message_t instead of path to show_message_body.Austin Clements
In addition to simplifying the code, we'll need the notmuch_message_t* in show_message_body shortly.
2011-10-22cli: change argument parsing convention for subcommandsDavid Bremner
previously we deleted the subcommand name from argv before passing to the subcommand. In this version, the deletion is done in the actual subcommands. Although this causes some duplication of code, it allows us to be more flexible about how we parse command line arguments in the subcommand, including possibly using off-the-shelf routines like getopt_long that expect the name of the command in argv[0].
2011-10-06Ignore "application/pgp-*" parts in reply.Jameson Graef Rollins
The quoted text doesn't need to mention that the message being replied to had these crufty parts.
2011-10-06Fix notmuch-reply to not output "Non-text part:" lines for non-leafnode parts.Jameson Graef Rollins
These lines are just cruft in this case, and can be removed.
2011-09-05Improve handling of message/rfc822 parts by adding a new header_message_part function to the formating structure.Jameson Graef Rollins
This new function takes a GMimeMessage as input, and outputs the formatted headers. This allows for message/rfc822 parts to be formatted on output in a similar way to full messages (see previous patch that overhauls the multipart test for more info).
2011-06-23fix sum moar typos [comments in source code]Pieter Praet
Various typo fixes in comments within the source code. Signed-off-by: Pieter Praet <pieter@praet.org> Edited-by: Carl Worth <cworth@cworth.org> Restricted to just source-code comments, (and fixed fix of "descriptios" to "descriptors" rather than "descriptions").
2011-06-15Fix indentation in guess_from_received_header().Dmitry Kurochkin
2011-06-15Fix memory leak in guess_from_received_header().Dmitry Kurochkin
Mta variable was not free()d in one case.
2011-06-15Fix double free in guess_from_received_header().Dmitry Kurochkin
Before the change, the last loop in guess_from_received_header() did not reset domain and tld variables to NULL. This leads to double free error in some cases and possibly other bugs.
2011-06-03Use stock GMimeSession by defaultDaniel Kahn Gillmor
Our use of GMimeSession was unneeded boilerplate, and we weren't doing anything with it. This simplifies and clarifies that assumption. If we want to do anything fancier later, the examples in the gmime source are a reasonable source to work from in defining a new GMimeSession derivative. Since GMimeSession is going away in GMime 2.6, though, i don't recommend using it.
2011-05-27Add decryption of PGP/MIME-encrypted parts with --decrypt.Jameson Graef Rollins
This adds support for decrypting PGP/MIME-encrypted parts to notmuch-show and notmuch-reply. The --decrypt option implies --verify. Once decryption (and possibly signature verification) is done, a new part_encstatus formatter is emitted, the part_sigstatus formatter is emitted, and the entire multipart/encrypted part is replaced by the contents of the encrypted part. At the moment only a json part_encstatus formatting function is available, even though decryption is done for all formats. Emacs support to follow.
2011-05-27Add signature verification of PGP/MIME-signed parts with --verify.Jameson Graef Rollins
This is primarily for notmuch-show, although the functionality is added to show-message. Once signatures are processed a new part_sigstatus formatter is emitted, and the entire multipart/signed part is replaced with the contents of the signed part. At the moment only a json part_sigstatus formatting function is available. Emacs support to follow. The original work for this patch was done by Daniel Kahn Gillmor <dkg@fifthhorseman.net> whose help with this functionality I greatly appreciate.
2011-05-27Break up format->part function into part_start and part_content functions.Jameson Graef Rollins
Future improvements (eg. crypto support) will require adding new part header. By breaking up the output of part headers from the output of part content, we can easily out new part headers with new formatting functions.
2011-05-27Use empty strings instead of NULL in format_reply structure.Jameson Graef Rollins
This keeps things consistent with notmuch-show, and prevents having to check for the existence of the field pointer for simple string output formats.
2011-05-27Integrate reply_part_content function into reply_part function.Jameson Graef Rollins
After the last patch to eliminate some redundant code paths in reply_part, the reply_part_content function was only being called once. Disolving the function and integrating its contents into the reply_part function makes things a little simpler, and frees up some name space that will be needed in the next patch.
2011-05-27Simplify reply_part function to eliminate redundant code paths.Jameson Graef Rollins
This is the same logic but with less code.
2011-05-23New part output handling as option to notmuch-show.Jameson Graef Rollins
Outputting of single MIME parts is moved to an option of notmuch show, instead of being handled in it's own sub-command. The recent rework of multipart mime allowed for this change but consolidating part handling into a single recursive function (show_message_part) that includes formatting. This allows for far simpler handling single output of a single part, including formatting.
2011-05-23add part_sep formatter to replace "first" argument to part format functionsJameson Graef Rollins
A new field "part_sep" is added to the notmuch_show_format structure, to be used for part separation. This is cleaner than the "first" argument that was being passed around to the part arguments, and allows the function that handles overall part output formatting (show_message_part) to directly handle when outputting the separator.
2011-05-20pass entire format structure to various show_message functionsJameson Graef Rollins
Various show_message* functions require formatting functions, which were previously being passed individually as arguments. Since we will need to be needing to passing in more formatting function in the future (ie. for crypto support), we here modify things so that we just pass in the entire format structure. This will make things much simpler down the line as we need to pass in new format functions. We move the show_format structure into notmuch-client.c as notmuch_show_format. This also affects notmuch-reply.c, so we create a mostly-empty format_reply to pass the reply_part function to show_message_body.
2011-05-17notmuch show: Properly nest MIME parts within mulipart partsCarl Worth
Previously, notmuch show flattened all output, losing information about the nesting of the MIME hierarchy. Now, the output is properly nested, (both in the --format=text and --format=json output), so that clients can analyze the original MIME structure. Internally, this required splitting the final closing delimiter out of the various show_part functions and putting it into a new show_part_end function instead. Also, the show_part function now accepts a new "first" argument that is set not only for the first MIME part of a message, but also for each first MIME part within a series of multipart parts. This "first" argument controls the omission of a preceding comma when printing a part (for json). Many thanks to David Edmondson <dme@dme.org> for originally identifying the lack of nesting in the json output and submitting an early implementation of this feature. Thanks as well to Jameson Graef Rollins <jrollins@finestructure.net> for carefully shepherding David's patches through a remarkably long review process, patiently explaining them, and providing a cleaned up series that led to this final implementation. Jameson also provided the new emacs code here.
2010-10-27notmuch: Eliminate some const-correctness warnings.Carl Worth
These were introduced as a side-effect of commit b9eac48c22f53f84ed1d9c1d8ca862a7b638c9ac (shame on me for doing side-effect commits like that!). For me, at least, compilation is now warning-free.
2010-10-27Remove bcc header from notmuch reply.Jameson Rollins
Notmuch reply should not be Bcc'ing the sender by default. This is not the appropriate way to save copies of sent mail (which should probably be handled by an Fcc header[*]) and it doesn't give the user the option to not be bcc'd. This is really something that should be handled by the reader UI. For instance, emacs message-mode can easily be configured to add Bcc's if the user wishes. [*] Carl Worth: The FCC header is now in place by default in the emacs user-interface (and tested in the test suite) so the Bcc is ready to be eliminated.
2010-04-27Rename already used counter var iAneesh Kumar K.V
i is already used in a for loop at this point, so using i here again broke notmuch-reply (it would just hang). Use j instead of i here. Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
2010-04-26Rearchitect From: header guessing code for repliesDirk Hohndel
We want to be able to correctly guess the best From: header to use when replying to emails. This is what we are looking at now: 1 is one of the users' mail addresses in the To: or Cc: header 2 check for an Envelope-to: header 3 check for an X-Original-To: header 4 check for a (for <email@add.res>) clause in Received: headers 5 check for the domain part of known email addresses in the 'by' part of Received headers 6 fall back to the primary email address This patch changes the algorithm for steps 2-5 of this process. Prior to this patch we had a first attempt to implement only step 5 - but this broke in many email setups where mail delivery to the local machine added additional Received: lines. Steps 2-4 are new, step 5 now analyzes the concatenated Received: header (this was in the previous patch) to do this analysis. Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
2010-04-24notmuch reply: Handle notmuch_message_get_header returning NULL.Carl Worth
This seems a rather unlikely case, (replying to a message that disappears out from under us half way through the reply), but notmuch_message_get_header is documented to return NULL in error cases, so we might as well deal sanely with that (rather than just crashing).
2010-04-13Decode headers in replyMichal Sojka
When headers contain non-ASCII characters, they are encoded according to rfc2047. Nomtuch reply command emits the headers in the encoded form, which makes them hard to read by humans who compose the reply. For example instead of "Subject: Re: Rozlučka" one currently sees "Subject: Re: =?iso-8859-2?q?Rozlu=E8ka?=". This patch adds a new GMime filter which is used to decode headers to UTF-8 and uses this filter when notmuch reply outputs headers. Signed-off-by: Michal Sojka <sojkam1@fel.cvut.cz>
2010-04-07Fix code extracting the MTA from Received: headersDirk Hohndel
The previous code made too many assumptions about the (sadly not standardized) format of the Received headers. This version should be more robust to deal with different variations. Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
2010-04-07notmuch-reply: Remove stray brace.Carl Worth
That was breaking the build.
2010-04-06notmuch-reply: Remove a useless level of nesting.Carl Worth
Making the code a tiny bit easier to read (in my opinion at least).
2010-04-06notmuch-reply: Fix some whitespace issues.Carl Worth
No actual code change here. Just whitespace style, (mostly just my preferred space before a left parenthesis, and a space after a comma).
2010-04-06guess From address from Received headersDirk Hohndel
When replying to a message notmuch tries to pick the correct From address by looking which one of a user's configured email addresses were included in To or Cc headers of the email that is being replied to. If none of the users email addresses are in the To or Cc headers we now try to guess from the first (chronologically, last) Received header which domain this email was received in and therefore which of the email addresses to use in a reply If that fails we still use the primary email as From email Signed-off-by: Dirk Hohndel <hohndel@infradead.org>
2010-03-09lib: Rename iterator functions to prepare for reverse iteration.Carl Worth
We rename 'has_more' to 'valid' so that it can function whether iterating in a forward or reverse direction. We also rename 'advance' to 'move_to_next' to setup parallel naming with the proposed functions 'move_to_first', 'move_to_last', and 'move_to_previous'.
2010-02-04notmuch reply: Rename the mailing_list_munged_reply_to functionCarl Worth
This function detects whether the address in the Reply-To header already appears in either To or Cc. So give it a name that reflects what it does (reply_to_header_is_redundant) rather than the old name which described one possible use of the function, (as a simple heuristic for detecting whether a mailing list had applied reply-to munging).
2010-02-04notmuch reply: Prevent GMIME assertion complaints for empty Reply-to header.Carl Worth
Apparently, GMime doesn't want to create a valid address list object for an empty string. That's annoying, but it's easy enough to test for the empty string and avoid the problem.
2010-02-04notmuch reply: Use strstr instead of strcasestr for portability.Carl Worth
This change was already recommended in a comment in the original implementation of this patch. If someone really wants to support un-munging in the case of To: and Reply-To: having the same address but different case, then they can provide a portable approach for that.
2010-02-04notmuch reply: Fix the support for reply-to un-munging.Carl Worth
The condition was using a reversed sense for the test of the return value of strcasestr, (perhaps confusing it with the usage of strcmp?).
2010-02-04notmuch-reply: Add missing whitespace.Carl Worth
Some recently-added functions were to hard for me to read without the expected whitespace. Fix these.
2010-02-04notmuch-reply.c: Handle munged `Reply-To' headers.Jed Brown
Some mailing lists engage in the evil practice of changing the Reply-To header so that replies from all mailers go to the list by default, at the expense of not responding to the person who actually sent the message. When this is detected, we reply to `From' and remove the duplicate response to the mailing list. Consider a reply to the following message. From: Some User <some.user@example.com> To: Sample users list <sample-users@sample.org> Reply-To: Sample users list <sample-users@sample.org> Prior to this patch, `notmuch reply' produces To: Sample users list <sample-users@sample.org>, Sample users list <sample-users@sample.org> and after the patch, To: Some User <some.user@example.com>, Sample users list <sample-users@sample.org> Signed-off-by: Jed Brown <jed@59A2.org>
2010-02-04notmuch-reply.c: Factor adding recipients into common functionJed Brown
This code was already duplicated. We move it to a new, shared add_recipients_from_message function, in preparation for more sophisticated mailing list logic. Signed-off-by: Jed Brown <jed@59A2.org>
2009-12-03notmuch-reply: Display reply message part using UTF-8.Kan-Ru Chen
Pass the message through the charset filter so that we can view messages wrote in different charset encoding. Signed-off-by: Kan-Ru Chen <kanru@kanru.info>
2009-11-27reply --format=headers-only: set In-Reply-To header, with ID *last* in ReferencesJed Brown
Apparently this is actually the correct way to do it, it's silly to do it wrong just to conform to one of git's internal data structures.
2009-11-27notmuch-reply.c: implement notmuch_reply_format_headers_onlyJed Brown
This command only generates References, To, and Cc headers. The purpose is primarily for use in git send-email --notmuch id:<MESSAGE-ID> to get proper threading and address the relevant parties. Hooks for other SCMs may come later. Signed-off-by: Jed Brown <jed@59A2.org>
2009-11-27notmuch-reply.c: accept the --format=default default option.Jed Brown
This factors actual generation of the reply out of notmuch_reply_command into notmuch_reply_format_default(), in preparation for other --format= options. Signed-off-by: Jed Brown <jed@59A2.org>
2009-11-23lib/query: Drop the first and max_messages arguments from search_messages.Carl Worth
These only existed to support the chunky-searching hack, but that was recently dropped anyway.
2009-11-23Make addresses case insensitive for the purpose of constructing replies.Jed Brown
The domain is alway case insensitive, but in principle the username is case sensitive. Few systems actually enforce this so I think a good default is to treat the entire address as case insensitive, it will eliminate a lot of superfluous self-addressed messages and reply from the correct address in these cases. Signed-off-by: Jed Brown <jed@59A2.org>
2009-11-21Rename NOTMUCH_DATABASE_MODE_WRITABLE to NOTMUCH_DATABASE_MODE_READ_WRITECarl Worth
And correspondingly, READONLY to READ_ONLY.
2009-11-21Permit opening the notmuch database in read-only mode.Chris Wilson
We only rarely need to actually open the database for writing, but we always create a Xapian::WritableDatabase. This has the effect of preventing searches and like whilst updating the index. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Acked-by: Carl Worth <cworth@cworth.org>