]> git.notmuchmail.org Git - notmuch/commitdiff
lib: read reference terms into message struct.
authorDavid Bremner <david@tethera.net>
Thu, 30 Aug 2018 11:29:05 +0000 (08:29 -0300)
committerDavid Bremner <david@tethera.net>
Thu, 6 Sep 2018 11:07:12 +0000 (08:07 -0300)
The plan is to use these in resolving threads.

lib/message.cc
lib/notmuch-private.h

index 23266c1af90f5823d9adf95d959f7ad3d8bbd310..9d090bcf8cca778c2e0e7f9c02a4f16371fc10b8 100644 (file)
@@ -41,6 +41,7 @@ struct _notmuch_message {
     notmuch_message_file_t *message_file;
     notmuch_string_list_t *property_term_list;
     notmuch_string_map_t *property_map;
+    notmuch_string_list_t *reference_list;
     notmuch_message_list_t *replies;
     unsigned long flags;
     /* For flags that are initialized on-demand, lazy_flags indicates
@@ -129,6 +130,7 @@ _notmuch_message_create_for_document (const void *talloc_owner,
     message->author = NULL;
     message->property_term_list = NULL;
     message->property_map = NULL;
+    message->reference_list = NULL;
 
     message->replies = _notmuch_message_list_create (message);
     if (unlikely (message->replies == NULL)) {
@@ -349,6 +351,7 @@ _notmuch_message_ensure_metadata (notmuch_message_t *message, void *field)
        *type_prefix = _find_prefix ("type"),
        *filename_prefix = _find_prefix ("file-direntry"),
        *property_prefix = _find_prefix ("property"),
+       *reference_prefix = _find_prefix ("reference"),
        *replyto_prefix = _find_prefix ("replyto");
 
     /* We do this all in a single pass because Xapian decompresses the
@@ -413,6 +416,14 @@ _notmuch_message_ensure_metadata (notmuch_message_t *message, void *field)
                    _notmuch_database_get_terms_with_prefix (message, i, end,
                                                         property_prefix);
 
+           /* get references */
+           assert (strcmp (property_prefix, reference_prefix) < 0);
+           if (!message->reference_list) {
+               message->reference_list =
+                   _notmuch_database_get_terms_with_prefix (message, i, end,
+                                                            reference_prefix);
+           }
+
            /* Get reply to */
            assert (strcmp (property_prefix, replyto_prefix) < 0);
            if (!message->in_reply_to)
@@ -588,6 +599,13 @@ _notmuch_message_add_reply (notmuch_message_t *message,
     _notmuch_message_list_add_message (message->replies, reply);
 }
 
+const notmuch_string_list_t *
+_notmuch_message_get_references (notmuch_message_t *message)
+{
+    _notmuch_message_ensure_metadata (message, message->reference_list);
+    return message->reference_list;
+}
+
 static int
 _cmpmsg (const void *pa, const void *pb)
 {
index 39fc47572b9053c6c98f93c6283e2f6a97cc4e13..bd9d27476a4406d88ecf86f9b6543cc6800c6587 100644 (file)
@@ -583,6 +583,9 @@ _notmuch_string_list_append (notmuch_string_list_t *list,
 void
 _notmuch_string_list_sort (notmuch_string_list_t *list);
 
+const notmuch_string_list_t *
+_notmuch_message_get_references(notmuch_message_t *message);
+
 /* string-map.c */
 typedef struct _notmuch_string_map  notmuch_string_map_t;
 typedef struct _notmuch_string_map_iterator notmuch_string_map_iterator_t;