summaryrefslogtreecommitdiff
path: root/message.cc
diff options
context:
space:
mode:
authorCarl Worth <cworth@cworth.org>2009-10-26 17:35:31 -0700
committerCarl Worth <cworth@cworth.org>2009-10-26 17:35:31 -0700
commitc12823648ee84b4748e0e9f0cd97f7264911b589 (patch)
treec3bbb5ed573bcd2a63167416ccab6a09f708ffb5 /message.cc
parent8e96a87fff4d34a154d1456e9ad47e7b0c322d54 (diff)
Add public notmuch_thread_get_subject
And use this in "notmuch search" to display subject line as well as thread ID.
Diffstat (limited to 'message.cc')
-rw-r--r--message.cc32
1 files changed, 29 insertions, 3 deletions
diff --git a/message.cc b/message.cc
index 66dfc80..6b6141f 100644
--- a/message.cc
+++ b/message.cc
@@ -29,6 +29,7 @@ struct _notmuch_message {
char *message_id;
char *thread_id;
char *filename;
+ notmuch_message_file_t *message_file;
Xapian::Document doc;
};
@@ -98,9 +99,12 @@ _notmuch_message_create (const void *talloc_owner,
message->notmuch = notmuch;
message->doc_id = doc_id;
- message->message_id = NULL; /* lazily created */
- message->thread_id = NULL; /* lazily created */
- message->filename = NULL; /* lazily created */
+
+ /* Each of these will be lazily created as needed. */
+ message->message_id = NULL;
+ message->thread_id = NULL;
+ message->filename = NULL;
+ message->message_file = NULL;
/* This is C++'s creepy "placement new", which is really just an
* ugly way to call a constructor for a pre-allocated object. So
@@ -225,6 +229,28 @@ notmuch_message_get_message_id (notmuch_message_t *message)
}
const char *
+_notmuch_message_get_subject (notmuch_message_t *message)
+{
+ if (! message->message_file) {
+ notmuch_message_file_t *message_file;
+ const char *filename;
+
+ filename = notmuch_message_get_filename (message);
+ if (unlikely (filename == NULL))
+ return NULL;
+
+ message_file = _notmuch_message_file_open_ctx (message, filename);
+ if (unlikely (message_file == NULL))
+ return NULL;
+
+ message->message_file = message_file;
+ }
+
+ return notmuch_message_file_get_header (message->message_file,
+ "subject");
+}
+
+const char *
notmuch_message_get_thread_id (notmuch_message_t *message)
{
Xapian::TermIterator i;