diff options
Diffstat (limited to 'thread.cc')
-rw-r--r-- | thread.cc | 55 |
1 files changed, 48 insertions, 7 deletions
@@ -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) { |