+void
+_notmuch_thread_add_message (notmuch_thread_t *thread,
+ notmuch_message_t *message)
+{
+ notmuch_tags_t *tags;
+ const char *tag;
+ time_t date;
+
+ if (! thread->subject) {
+ const char *subject;
+ subject = notmuch_message_get_header (message, "subject");
+ thread->subject = talloc_strdup (thread, subject);
+ }
+
+ for (tags = notmuch_message_get_tags (message);
+ notmuch_tags_has_more (tags);
+ notmuch_tags_advance (tags))
+ {
+ tag = notmuch_tags_get (tags);
+ g_hash_table_insert (thread->tags, xstrdup (tag), NULL);
+ }
+
+ date = notmuch_message_get_date (message);
+
+ if (date < thread->oldest || ! thread->has_message)
+ thread->oldest = date;
+
+ if (date > thread->newest || ! thread->has_message)
+ thread->newest = date;
+
+ thread->has_message = 1;
+}
+
+const char *
+notmuch_thread_get_subject (notmuch_thread_t *thread)
+{
+ return thread->subject;
+}
+
+time_t
+notmuch_thread_get_oldest_date (notmuch_thread_t *thread)
+{
+ return thread->oldest;
+}
+
+time_t
+notmuch_thread_get_newest_date (notmuch_thread_t *thread)
+{
+ return thread->newest;
+}
+
+notmuch_tags_t *
+notmuch_thread_get_tags (notmuch_thread_t *thread)
+{
+ notmuch_tags_t *tags;
+ GList *keys, *l;
+
+ tags = _notmuch_tags_create (thread);
+ if (unlikely (tags == NULL))
+ return NULL;
+
+ keys = g_hash_table_get_keys (thread->tags);
+
+ for (l = keys; l; l = l->next)
+ _notmuch_tags_add_tag (tags, (char *) l->data);
+
+ g_list_free (keys);
+
+ _notmuch_tags_prepare_iterator (tags);
+
+ return tags;
+}
+