aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/message.cc
diff options
context:
space:
mode:
authorGravatar Carl Worth <cworth@cworth.org>2009-11-15 20:39:25 -0800
committerGravatar Carl Worth <cworth@cworth.org>2009-11-15 20:41:45 -0800
commit933caf814fcbbb7420d03ef42bb37bea6dd90449 (patch)
treea96e78c60ee4c94cdd92a092746dadd594c89b15 /lib/message.cc
parent819f964d9a8cf5c92c5d13e8d1f1ac908f159a8c (diff)
notmuch show: Implement proper thread ordering/nesting of messages.
We now properly analyze the in-reply-to headers to create a proper tree representing the actual thread and present the messages in this correct thread order. Also, there's a new "depth:" value added to the "message{" header so that clients can format the thread as desired, (such as by indenting replies).
Diffstat (limited to 'lib/message.cc')
-rw-r--r--lib/message.cc22
1 files changed, 22 insertions, 0 deletions
diff --git a/lib/message.cc b/lib/message.cc
index b9f998c5..72c350f3 100644
--- a/lib/message.cc
+++ b/lib/message.cc
@@ -33,6 +33,8 @@ struct _notmuch_message {
char *thread_id;
char *filename;
notmuch_message_file_t *message_file;
+ notmuch_message_list_t *replies;
+
Xapian::Document doc;
};
@@ -110,6 +112,13 @@ _notmuch_message_create (const void *talloc_owner,
message->filename = NULL;
message->message_file = NULL;
+ message->replies = _notmuch_message_list_create (message);
+ if (unlikely (message->replies == NULL)) {
+ if (status)
+ *status = NOTMUCH_PRIVATE_STATUS_OUT_OF_MEMORY;
+ return 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
* it's really not an error to not be checking for OUT_OF_MEMORY
@@ -305,6 +314,19 @@ notmuch_message_get_thread_id (notmuch_message_t *message)
return message->thread_id;
}
+void
+_notmuch_message_add_reply (notmuch_message_t *message,
+ notmuch_message_node_t *reply)
+{
+ _notmuch_message_list_append (message->replies, reply);
+}
+
+notmuch_messages_t *
+notmuch_message_get_replies (notmuch_message_t *message)
+{
+ return _notmuch_messages_create (message->replies);
+}
+
/* Set the filename for 'message' to 'filename'.
*
* XXX: We should still figure out if we think it's important to store