]> git.notmuchmail.org Git - notmuch/blobdiff - lib/thread.cc
emacs: Fix the notmuch-search-authors-width variable.
[notmuch] / lib / thread.cc
index 4411d64d98da05964318b23c0d26cc9dba7e77af..1c8b39d208bc89a780675da6f27f98de0b168b97 100644 (file)
@@ -119,8 +119,8 @@ _thread_add_message (notmuch_thread_t *thread,
     }
 
     for (tags = notmuch_message_get_tags (message);
-        notmuch_tags_has_more (tags);
-        notmuch_tags_advance (tags))
+        notmuch_tags_valid (tags);
+        notmuch_tags_move_to_next (tags))
     {
        tag = notmuch_tags_get (tags);
        g_hash_table_insert (thread->tags, xstrdup (tag), NULL);
@@ -132,6 +132,7 @@ _thread_add_matched_message (notmuch_thread_t *thread,
                             notmuch_message_t *message)
 {
     time_t date;
+    notmuch_message_t *hashed_message;
 
     date = notmuch_message_get_date (message);
 
@@ -142,6 +143,13 @@ _thread_add_matched_message (notmuch_thread_t *thread,
        thread->newest = date;
 
     thread->matched_messages++;
+
+    if (g_hash_table_lookup_extended (thread->message_hash,
+                           notmuch_message_get_message_id (message), NULL,
+                           (void **) &hashed_message)) {
+       notmuch_message_set_flag (hashed_message,
+                                 NOTMUCH_MESSAGE_FLAG_MATCH, 1);
+    }
 }
 
 static void
@@ -155,7 +163,7 @@ _resolve_thread_relationships (unused (notmuch_thread_t *thread))
     while ((node = *prev)) {
        message = node->message;
        in_reply_to = _notmuch_message_get_in_reply_to (message);
-       if (in_reply_to &&
+       if (in_reply_to && strlen (in_reply_to) &&
            g_hash_table_lookup_extended (thread->message_hash,
                                          in_reply_to, NULL,
                                          (void **) &parent))
@@ -190,7 +198,7 @@ _resolve_thread_relationships (unused (notmuch_thread_t *thread))
  * subject line, the total count of messages, and all authors). The
  * second search is for all messages that are in the thread and that
  * also match the given query_string. This is to allow for a separate
- * count of matched messages, and to allow a viewer to diplay these
+ * count of matched messages, and to allow a viewer to display these
  * messages differently.
  *
  * Here, 'ctx' is talloc context for the resulting thread object.
@@ -207,6 +215,7 @@ _notmuch_thread_create (void *ctx,
     const char *thread_id_query_string, *matched_query_string;
     notmuch_query_t *thread_id_query, *matched_query;
     notmuch_messages_t *messages;
+    notmuch_message_t *message;
 
     thread_id_query_string = talloc_asprintf (ctx, "thread:%s", thread_id);
     if (unlikely (query_string == NULL))
@@ -257,22 +266,25 @@ _notmuch_thread_create (void *ctx,
     thread->oldest = 0;
     thread->newest = 0;
 
-    notmuch_query_set_sort (thread_id_query, NOTMUCH_SORT_DATE);
+    notmuch_query_set_sort (thread_id_query, NOTMUCH_SORT_OLDEST_FIRST);
 
-    for (messages = notmuch_query_search_messages (thread_id_query, 0, -1);
-        notmuch_messages_has_more (messages);
-        notmuch_messages_advance (messages))
+    for (messages = notmuch_query_search_messages (thread_id_query);
+        notmuch_messages_valid (messages);
+        notmuch_messages_move_to_next (messages))
     {
-       _thread_add_message (thread, notmuch_messages_get (messages));
+       message = notmuch_messages_get (messages);
+       _thread_add_message (thread, message);
+       _notmuch_message_close (message);
     }
 
     notmuch_query_destroy (thread_id_query);
-
-    for (messages = notmuch_query_search_messages (matched_query, 0, -1);
-        notmuch_messages_has_more (messages);
-        notmuch_messages_advance (messages))
+    for (messages = notmuch_query_search_messages (matched_query);
+        notmuch_messages_valid (messages);
+        notmuch_messages_move_to_next (messages))
     {
-       _thread_add_matched_message (thread, notmuch_messages_get (messages));
+       message = notmuch_messages_get (messages);
+       _thread_add_matched_message (thread, message);
+       _notmuch_message_close (message);
     }
 
     notmuch_query_destroy (matched_query);