X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=thread.cc;h=b67dfade5e16091fde964ddbafd69e1da6b5eb01;hp=e4c9e111a7c4af21901a6cadbf0df4543ce86697;hb=d4c4318fb95ba2ed86823389cf82b11a2bcae073;hpb=d07dd49aac0f337d3f631504f521311a9685bd1f diff --git a/thread.cc b/thread.cc index e4c9e111..b67dfade 100644 --- a/thread.cc +++ b/thread.cc @@ -30,6 +30,10 @@ struct _notmuch_thread { char *thread_id; char *subject; GHashTable *tags; + + notmuch_bool_t has_message; + time_t oldest; + time_t newest; }; static int @@ -74,6 +78,10 @@ _notmuch_thread_create (const void *talloc_owner, thread->tags = g_hash_table_new_full (g_str_hash, g_str_equal, free, NULL); + thread->has_message = 0; + thread->oldest = 0; + thread->newest = 0; + return thread; } @@ -84,15 +92,36 @@ notmuch_thread_get_thread_id (notmuch_thread_t *thread) } void -_notmuch_thread_add_tag (notmuch_thread_t *thread, const char *tag) +_notmuch_thread_add_message (notmuch_thread_t *thread, + notmuch_message_t *message) { - g_hash_table_insert (thread->tags, xstrdup (tag), NULL); -} + notmuch_tags_t *tags; + const char *tag; + time_t date; -void -_notmuch_thread_set_subject (notmuch_thread_t *thread, const char *subject) -{ - thread->subject = talloc_strdup (thread, subject); + 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 * @@ -101,6 +130,18 @@ 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) {