X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=lib%2Fadd-message.cc;h=da37032c5979cb0eeb1d67621dc9d57bff80a32f;hp=bce10a0f614c3abe487cd055e7db50013936c013;hb=e9b870b6923afe767a7c9938be24f5390102031a;hpb=008a5e92eb157e2bb8622cb2fbf644deba5ba4b4 diff --git a/lib/add-message.cc b/lib/add-message.cc index bce10a0f..da37032c 100644 --- a/lib/add-message.cc +++ b/lib/add-message.cc @@ -227,7 +227,7 @@ _notmuch_database_link_message_to_parents (notmuch_database_t *notmuch, const char **thread_id) { GHashTable *parents = NULL; - const char *refs, *in_reply_to, *in_reply_to_message_id; + const char *refs, *in_reply_to, *in_reply_to_message_id, *strict_message_id = NULL; const char *last_ref_message_id, *this_message_id; GList *l, *keys = NULL; notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS; @@ -242,14 +242,24 @@ _notmuch_database_link_message_to_parents (notmuch_database_t *notmuch, parents, refs); in_reply_to = _notmuch_message_file_get_header (message_file, "in-reply-to"); + if (in_reply_to) + strict_message_id = _notmuch_message_id_parse_strict (message, + in_reply_to); + in_reply_to_message_id = parse_references (message, this_message_id, parents, in_reply_to); - /* For the parent of this message, use the last message ID of the - * References header, if available. If not, fall back to the - * first message ID in the In-Reply-To header. */ - if (last_ref_message_id) { + /* For the parent of this message, use + * 1) the In-Reply-To header, if it looks sane, otherwise + * 2) the last message ID of the References header, if available. + * 3) Otherwise, fall back to the first message ID in + * the In-Reply-To header. + */ + + if (strict_message_id) { + _notmuch_message_add_term (message, "replyto", strict_message_id); + } else if (last_ref_message_id) { _notmuch_message_add_term (message, "replyto", last_ref_message_id); } else if (in_reply_to_message_id) { @@ -460,7 +470,7 @@ _notmuch_database_link_message (notmuch_database_t *notmuch, notmuch_status_t notmuch_database_index_file (notmuch_database_t *notmuch, const char *filename, - notmuch_indexopts_t unused (*indexopts), + notmuch_indexopts_t *indexopts, notmuch_message_t **message_ret) { notmuch_message_file_t *message_file; @@ -468,6 +478,7 @@ notmuch_database_index_file (notmuch_database_t *notmuch, notmuch_status_t ret = NOTMUCH_STATUS_SUCCESS, ret2; notmuch_private_status_t private_status; bool is_ghost = false, is_new = false; + notmuch_indexopts_t *def_indexopts = NULL; const char *date; const char *from, *to, *subject; @@ -540,7 +551,12 @@ notmuch_database_index_file (notmuch_database_t *notmuch, if (is_new || is_ghost) _notmuch_message_set_header_values (message, date, from, subject); - ret = _notmuch_message_index_file (message, message_file); + if (!indexopts) { + def_indexopts = notmuch_database_get_default_indexopts (notmuch); + indexopts = def_indexopts; + } + + ret = _notmuch_message_index_file (message, indexopts, message_file); if (ret) goto DONE; @@ -557,6 +573,9 @@ notmuch_database_index_file (notmuch_database_t *notmuch, } DONE: + if (def_indexopts) + notmuch_indexopts_destroy (def_indexopts); + if (message) { if ((ret == NOTMUCH_STATUS_SUCCESS || ret == NOTMUCH_STATUS_DUPLICATE_MESSAGE_ID) && message_ret)