-/* Create a new notmuch_thread_t object for the given thread ID.
- *
- * Creating the thread will trigger a database search for the messages
- * belonging to the thread so that the thread object can return some
- * details about them, (authors, subject, etc.).
+static void
+_resolve_thread_relationships (unused (notmuch_thread_t *thread))
+{
+ notmuch_message_node_t **prev, *node;
+ notmuch_message_t *message, *parent;
+ const char *in_reply_to;
+
+ prev = &thread->message_list->head;
+ while ((node = *prev)) {
+ message = node->message;
+ in_reply_to = _notmuch_message_get_in_reply_to (message);
+ if (in_reply_to && strlen (in_reply_to) &&
+ g_hash_table_lookup_extended (thread->message_hash,
+ in_reply_to, NULL,
+ (void **) &parent))
+ {
+ *prev = node->next;
+ if (thread->message_list->tail == &node->next)
+ thread->message_list->tail = prev;
+ node->next = NULL;
+ _notmuch_message_add_reply (parent, node);
+ } else {
+ prev = &((*prev)->next);
+ }
+ }
+
+ /* XXX: After scanning through the entire list looking for parents
+ * via "In-Reply-To", we should do a second pass that looks at the
+ * list of messages IDs in the "References" header instead. (And
+ * for this the parent would be the "deepest" message of all the
+ * messages found in the "References" list.)
+ *
+ * Doing this will allow messages and sub-threads to be positioned
+ * correctly in the thread even when an intermediate message is
+ * missing from the thread.
+ */
+}
+
+/* Create a new notmuch_thread_t object for the given thread ID,
+ * treating any messages matching 'query_string' as "matched".